BIO、NIO、AIO介紹與區別

BIO、NIO、AIO介紹與區別

阻塞與非阻塞
主要是指訪問IO的線程是否會阻塞
線程訪問資源,該資源是否準備就緒的一種處理方式。
阻塞與非阻塞區別
同步與異步
主要是指數據的請求方式
同步和異步是指訪問數據的一種機制
同步與異步
BIO
同步阻塞 IO,Block IO
IO 操作時會阻塞線程,併發處理能力低。
我們熟知的 Socket 編程就是 BIO,一個 socket 連接一個處理線程(這個線程負責這個 Socket 連接的一系列數據傳輸操作)。阻塞的原因在於:操作系統允許的線程數量是有限的,多個 socket 申請與服務端建立連接時,服務端不能提供相應數量的處理線程,沒有分配到處理線程的連接就會阻塞等待或被拒絕。
BIO模型
NIO
同步非阻塞 IO,None-Block IO
NIO 是對 BIO 的改進,基於 Reactor 模型。我們知道,一個 socket 連接只有在特點時候纔會發生數據傳輸 IO 操作,大部分時間這個「數據通道」是空閒的,但還是佔用着線程。NIO 作出的改進就是「一個請求一個線程」,在連接到服務端的衆多 socket 中,只有需要進行 IO 操作的才能獲取服務端的處理線程進行 IO。這樣就不會因爲線程不夠用而限制了 socket 的接入
NIO模型
AIO 異步非阻塞 IO 這種 IO 模型是由操作系統先完成了客戶端請求處理再通知服務器去啓動線程進行處理。AIO 也稱 NIO2.0,在 JDK7開始支持