五種IO模型

image.png
阻塞IO
優(yōu)點(diǎn):數(shù)據(jù)可用立刻返回,沒(méi)有延遲;調(diào)用簡(jiǎn)單;
缺點(diǎn):整個(gè)過(guò)程,用戶進(jìn)程都處于阻塞等待狀態(tài)。

image.png
非阻塞IO
這種方式下,用戶進(jìn)程定期輪詢,每次輪詢都相當(dāng)于一個(gè)小的阻塞(尤其是網(wǎng)絡(luò)請(qǐng)求)。而在輪詢間隔期間可以做其他的事情。

image.png
IO復(fù)用
在這兩個(gè)過(guò)程中,select 只負(fù)責(zé)等待,recvfrom 負(fù)責(zé)從操作內(nèi)核空間拷貝數(shù)據(jù)。
從這點(diǎn)來(lái)說(shuō)多路復(fù)用跟阻塞IO很像,但因?yàn)閟elector可以對(duì)多個(gè)文件描述符進(jìn)行阻塞監(jiān)聽(tīng),所以效率比阻塞IO的高。

image.png

Java NIO Selector
信號(hào)驅(qū)動(dòng)IO
所謂信號(hào)驅(qū)動(dòng),其實(shí)就是提前向內(nèi)核注冊(cè),然后收到通知后回調(diào)處理函數(shù)。

image.png
異步IO
異步IO有點(diǎn)類似信號(hào)驅(qū)動(dòng)IO,區(qū)別在于
- 信號(hào)驅(qū)動(dòng)IO是由內(nèi)核通知我們何時(shí)可以啟動(dòng)一個(gè)IO操作
-
異步IO模型是由內(nèi)核告知我們IO操作何時(shí)完
image.png
三種并發(fā)編程模型
actor模型

reactor模型

image.png
proactor模型

image.png
常見(jiàn)的Reactor模型
單線程模型

image.png
多線程模型
這種模型就是現(xiàn)在成熟的Reactor模式。但是請(qǐng)求進(jìn)一步增加的時(shí)候,Reactor會(huì)出現(xiàn)瓶頸。因?yàn)镽eactor既要處理IO操作請(qǐng)求,又要響應(yīng)連接請(qǐng)求

image.png
主從多線程模型
主Reactor用于響應(yīng)連接請(qǐng)求,從Reactor用于處理IO操作請(qǐng)求。

image.png
Netty模型

image.png
Flink-Netty

image.png
NettyProtocol

Server.png

Client.png
