日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java面试基础篇——第九篇:BIO,NIO,AIO的区别

發布時間:2025/3/8 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面试基础篇——第九篇:BIO,NIO,AIO的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

現在IO模型主要分三類:BIO(同步阻塞IO),NIO(同步非阻塞IO),AIO()。 先來看看BIO。

1. BIO

服務端接受到請求后,要指派或新建一個線程去處理客戶端的IO請求,直到收到斷開連接的指令。這么做的弊端是什么呢?當服務端收到大量來自客戶端的IO請求時,需要新建大量線程來處理請求,服務器資源很可能被耗盡,高并發情況下,導致大量連接被掛起,服務器資源嚴重不足。因為BIO是同步阻塞模型,所以針對每個socket連接,服務器都要新建線程,哪怕是使用了線程池,也會造成因為線程上下文切換而造成大量開銷。

NIO

NIO是非阻塞IO,使用Reactor模型。Reactor模型中,NIO只有acceptor的服務線程是堵塞進行的,其它讀寫線程是通過注冊事件的方式,有讀寫事件激活時才調用線程資源去執行,不會一直堵塞等著讀寫操作。Reactor的瓶頸主要是在acceptor的執行,所有的讀寫事件都是在acceptor分發。

AIO

與NIO不同,AIO需要一個連接注冊讀寫事件和回調方法,當進行讀寫操作時,只須直接調用API的read或write方法即可。這兩種方法均為異步的,對于讀操作而言,當有流可讀取時,操作系統會將可讀的流傳入read方法的緩沖區,并通知應用程序;對于寫操作而言,當操作系統將write方法傳遞的流寫入完畢時,操作系統主動通知應用程序。總結:用戶發起IO操作立即返回,等IO操作完成后,應用程序會得到IO操作完成的通知,此時用戶進程只需要對通知進行處理,不需要進行實際的IO操作,因為實際操作已經由操作系統完成了。

BIO、NIO、AIO適用場景分析:

BIO方式適用于連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,并發局限于應用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。

NIO方式適用于連接數目多且連接比較短(輕操作)的架構,比如聊天服務器,并發局限于應用中,編程比較復雜,JDK1.4開始支持。

AIO方式使用于連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用OS參與并發操作,編程比較復雜,JDK7開始支持。

轉載于:https://my.oschina.net/liululee/blog/1861201

總結

以上是生活随笔為你收集整理的Java面试基础篇——第九篇:BIO,NIO,AIO的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。