【NIO引入】BIO、AIO與NIO的區別
阿新 • • 發佈:2018-12-31
同步非同步與阻塞非阻塞的區別
1.同步
例:買飯:自己親自去飯館買飯,這就是同步(自己處理IO讀寫)
2.非同步
例:買飯:叫外賣送到家,這就是非同步(IO讀寫委託給OS處理,需要將資料緩衝區地址和大小傳給OS(飯名和地址),OS需要支援非同步IO操作API)
3.阻塞
例:辦理業務:一直排隊等待(呼叫會一直阻塞到讀寫完成才返回)
4.非阻塞
例:辦理業務:抽號後就可以做其他事,如果你等不急,可以去問工作人員到你了沒,如果沒到你就不能辦理業務。(如果不能讀寫,呼叫會馬上返回,當IO事件分發器會通知可讀寫時再繼續進行讀寫,不斷迴圈直到讀寫完成)
BIO模型
同步阻塞
伺服器實現模式:一個連線一個執行緒,即客戶端有連線請求時伺服器端就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷。
BIO圖解:
偽非同步IO
通過執行緒池機制優化了BIO模型
偽非同步IO圖解:
NIO模型
同步非阻塞
伺服器實現模式為一個請求一個執行緒,但客戶端傳送的連線請求都會註冊到多路複用器上,多路複用器輪詢到連線有I/O請求時才啟動一個執行緒進行處理。
NIO圖解:
AIO模型
非同步非阻塞
伺服器實現模式為一個有效請求一個執行緒,客戶端的I/O請求都是由OS先完成了再通知伺服器應用去啟動執行緒進行處理,
注:AIO又稱為NIO2.0,在JDK7才開始支援。
AIO流程圖
BIO、偽非同步、NIO和AIO模型的比較
本人才疏學淺,若有錯誤,請指出
謝謝!