Flink-Netty

五種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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容