JAVA 004 網絡編程 BIO NIO AIO
目錄(圖片來自於網絡)
多路復用Linux環境下底層機制
多路復用模式Reacotor和Proactor
BIO,NIO,AIO的簡單介紹
多路復用Linux環境下底層機制
多路復用模式Reacotor和Proactor
Reactor和Proactor模式的主要區別就是真正的讀取和寫入操作是由誰來完成的
Reactor中需要應用程序自己讀取或者寫入數據
Proactor模式,應用程序不需要進行實際的讀寫過程,它只需要從緩存區讀取或者寫入即可,操作系統會讀取緩存區或者寫入緩存區到真正的IO的設備
Reactor(反應器模式)
說明你可以進行讀寫操作了,關註的是IO操作的就緒事件(采用同步IO)
Proactor
說明已經完成完成讀寫操作了,具體內存在給定緩存區中,可以對這些內容進行其它操作了,關註的是IO操作的完成事件(采用異步IO)
BIO,NIO,AIO的基本介紹
BIO -> 多線程 -> 線程池 -> NIO -> AIO
BIO基於字節流和字符流進行操作(每次從流中讀一個或多個字節,直至讀取所有字節,它們沒有被緩存到任何地方)
NIO基於Channel(通道)和Buffer(緩沖)進行操作,數據總是從通道讀取到緩沖區,或者從緩沖區寫入到通道中,Selector用於監聽多個通道的事件(連接打開,數據到達)
基本對比(涉及到連接數和線程數的概念,以及線程分配模型)
BIO 同步阻塞式IO 一個線程處理一個連接,發起和處理IO都是同步的
NIO 同步非阻塞IO 一個線程處理多個連接,發起IO請求是非阻塞的但處理IO請求是同步
AIO 異步非阻塞IO 一個有效請求一個線程,發起和處理IO請求都是異步的
各自的適應場景
BIO 連接數量小,連接時間段,計算密集
NIO 連接數目多且連接比較短(輕操作)的架構
AIO 連接數目多且連接比較長(重操作)的架構
JAVA 004 網絡編程 BIO NIO AIO