1. 程式人生 > >JAVA 004 網絡編程 BIO NIO AIO

JAVA 004 網絡編程 BIO NIO AIO

基於 以及 技術分享 同步 linu 讀取 介紹 inux 應用程序

目錄(圖片來自於網絡)

  多路復用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