1. 程式人生 > >【NIO引入】BIO、AIO與NIO的區別

【NIO引入】BIO、AIO與NIO的區別

同步非同步與阻塞非阻塞的區別

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模型的比較

這裡寫圖片描述


本人才疏學淺,若有錯誤,請指出
謝謝!