溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Netty的線程模型

發(fā)布時間:2020-08-02 15:14:48 來源:網(wǎng)絡(luò) 閱讀:1048 作者:許大蟲 欄目:開發(fā)技術(shù)

    當(dāng)我們討論Netty線程模型的時候,一般首先會想到的是經(jīng)典的Reactor線程模型,盡管不同的NIO框架對于Reactor模式的實(shí)現(xiàn)存在差異,但本質(zhì)上還是遵循了Reactor的基礎(chǔ)線程模型。下面淺談一下我對Reactor線程模型的認(rèn)識

    1.Reactor單線程模型,是指所有的I/O操作都在同一個NIO線程上面完成。NIO線程的職責(zé)如下

作為NIO服務(wù)端,接收客戶端的TCP連接

作為NIO客戶端,向服務(wù)端發(fā)起TCP連接

讀取通信對端的請求或者應(yīng)答消息

向通信對端發(fā)送消息請求或者應(yīng)答消息

Netty的線程模型

    對于小容量的應(yīng)用可以用單線程,但是對于高負(fù)載、大并發(fā)的應(yīng)用不適用,因?yàn)樾阅苌蠠o法支撐

    2.Rector多線程模型與單線程模型最大的區(qū)別就是有一組NIO線程來處理I/O操作,特點(diǎn)如下:

有專門一個NIO線程---Acceptor線程用于監(jiān)聽服務(wù)端,接收客戶端的TCP連接請求

網(wǎng)絡(luò)I/O操作--讀、寫等由一個NIO線程池負(fù)責(zé),線程池可以采用標(biāo)準(zhǔn)的JDK線程池實(shí)現(xiàn)

一個NIO線程可以同時處理N條鏈路,但是一個鏈路只對應(yīng)一個NIO線程,防止發(fā)生并發(fā)操作

Netty的線程模型

大多數(shù)情況下,用多線程模型就可以滿足性能需求,但是如果一個NIO線程負(fù)責(zé)監(jiān)聽和處理大量連接也有可能會存在性能問題。

    3.主從Reactor多線程模型

Netty的線程模型

服務(wù)端用于接收客戶端連接的不在是一個單獨(dú)的NIO線程,而是一個獨(dú)立的NIO線程池。Acceptor接收到客戶端TCP連接請求并處理完成后(可能包含介入認(rèn)證等),將新創(chuàng)建的SocketChannel注冊到I/O線程池的某個I/O線程上,由它負(fù)責(zé)SocketChannel的讀寫和編解碼工作,可以解決一個服務(wù)端監(jiān)聽線程性能不足的問題,因此Netty的官方demo中,推薦使用該線程模型


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI