天天看點

BIO NIO AIO 差別

差別

針對 IO模型

BIO 同步阻塞 線程主動調用accept,read,write (同步),accept,read,write 需要阻塞等待傳回結果(阻塞)

NIO 同步非阻塞 線程主動調用死循環詢問是否有accept,read,write發生(同步),因為在調用accept,read,write時已經發生事件,是以不會去阻塞等待(基于多路複用器實作)(非阻塞)

AIO 異步非阻塞 主線程不主動調用或輪詢,連接配接、讀寫是交給回調函數處理,主線程可以做别的事(異步)。而且同樣是調用accept,read,write時已經發生事件,是以不會去阻塞等待、讀寫,是以是非阻塞(非阻塞),NIO也是基于多路複用器,是對NIO的封裝

另外:異步阻塞無意義:主線程即阻塞(主動調用),又異步等待回調(不主動調用,做其他事),有沖突,是以沒有意義 

總結:在IO模型中:

同步異步     是指調用accept,read,write事件時,如果主動調用(不管是BIO,或者NIO多路複用也需要循環詢問),則是同步,基于函數回調則是異步。

阻塞非阻塞 是指調用accept,read,write事件時,是否已經發生了事件,如果已經發生則非阻塞,沒有發生則阻塞等待。

附:要與多線程的同步異步阻塞非阻塞區分開,不要混為一談。

線程中的同步說的是對共享資料的安全性問題

線程同步:多線程對共享資料的使用,通過加鎖可以實作同步,如sysnchronized,reentrantlock

線程異步:多線程可同時使用共享變量或調用同一方法(這個概念感覺提及的比較少)

阻塞非阻塞:wait,sleep等進入阻塞狀态,否則是非阻塞狀态