天天看點

Java BIO,NIO,AIO差別

Java IO 模型

Java BIO,NIO,AIO差別

BIO (Blocking I/O,JDK1.4以前的唯一選擇):同步阻塞I/O模式

一個連接配接一個線程,用戶端有連接配接時服務端就要啟動一個線程進行處理。

Java BIO,NIO,AIO差別
Java BIO,NIO,AIO差別

NIO (New I/O,JDK1.4開始):同步非阻塞模式

一個線程處理多個請求,用戶端連接配接請求都會注冊到多路複用器,多路複用器輪詢,發現連接配接有IO請求就處理。

這樣可以充分利用線程,某個連接配接空閑時間就切換處理其他連接配接。

Java BIO,NIO,AIO差別
Java BIO,NIO,AIO差別

AIO (Asynchronous I/O,NIO2,JDK7開始):異步非阻塞I/O模型

還沒有得到廣泛應用。

引入異步通道,采用Proactor模式,簡化程式編寫,有效請求才啟動線程。

先由作業系統完成後才通知服務端啟動線程去處理

适用場景

BIO方式适用于連接配接數目比較小且固定的架構,這種方式對伺服器資源要求比較高,并發局限于應用中。

NIO方式适用于連接配接數目多且連接配接比較短(輕操作)的架構,比如聊天伺服器,并發局限于應用中,程式設計比較複雜。