1. 程式人生 > >快速讓你區分BIO、NIO、AIO

快速讓你區分BIO、NIO、AIO

BIO: 同步並阻塞,伺服器實現模式為一個連線一個執行緒,即客戶端有連線請求時伺服器端就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷,當然可以通過執行緒池機制改善 可以參閱圖片BIO.png 和偽非同步IO.png 使用場景:當需要的連線數比較少的時候,單次傳送的資料量比較大的時候,

NIO: 同步非阻塞,伺服器實現模式為一個請求一個執行緒,即客戶端傳送的連線請求都會註冊到多路複用器上,多路複用器輪詢到連線有I/O請求時才啟動一個執行緒進行處理。

   使用場景:方式適用於連線數目多且連線比較短(輕操作)的架構,比如聊天伺服器,併發侷限於應用中,程式設計比較複雜
   發展歷史:JDK1.4+

AIO:其實是NIO.2.0版本,意思為非同步非阻塞,伺服器實現模式為一個有效請求一個執行緒,客戶端的I/O請求都是由OS先完成了再通知伺服器應用去啟動執行緒進行處理,

     使用場景:AIO方式使用於連線數目多且連線比較長(重操作)的架構,比如相簿伺服器,充分呼叫OS參與併發操作,程式設計比較複雜
     發展歷史:JDK1.7+

小結:併發連線數不多時採用BIO,因為它程式設計和除錯都非常簡單,但如果涉及到高併發的情況,應選擇NIO或AIO,更好的建議是採用成熟的網路通訊框架Netty