NIO Reactor模型 & Netty線程模型

什么是Reactor線程模型史煎?
無(wú)論是 C++ 還是 Java 編寫的網(wǎng)絡(luò)框架,大多數(shù)都是基于 Reactor 模式進(jìn)行設(shè)計(jì)和開發(fā)驳糯,Reactor 模式基于事件驅(qū)動(dòng)篇梭,特別適合處理海量的 I/O 事件。

The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The service handler then demultiplexes the incoming requests and dispatches them synchronously to the associated request handlers.

Reactor線程模型的基本思想是:分而治之 + 事件驅(qū)動(dòng)

  1. 一個(gè)連接里完整的網(wǎng)絡(luò)處理過程一般分為accept酝枢、read恬偷、decode、process帘睦、encode袍患、send這幾個(gè)步驟。Reactor將每個(gè)步驟抽象成一個(gè)網(wǎng)絡(luò)事件(Task)
  2. 當(dāng)每個(gè)Task就緒時(shí)竣付,Reactor會(huì)收到網(wǎng)絡(luò)通知诡延,會(huì)把Task交給綁定了相應(yīng)Task的Handler執(zhí)行。

Reactor模型的核心結(jié)構(gòu)

  1. Reactor:響應(yīng)器卑笨,負(fù)責(zé)響應(yīng)事件
  2. Handler:處理器孕暇,負(fù)責(zé)處理事件
  3. Accepror:接收器仑撞,是事件處理器的一種赤兴,綁定了connect事件。當(dāng)客戶端發(fā)起connect操作時(shí)隧哮,Reactor會(huì)把connect事件桶良,交給Acceptor處理。

Reactor模型

  1. 單線程模型
  2. 多線程模型
  3. 主從多線程模型
單線程模型

優(yōu)點(diǎn):不需要并發(fā)控制沮翔,減少了上下文的切換
缺點(diǎn):不能使用多核CPU陨帆。一個(gè)線程需要處理所有網(wǎng)絡(luò)時(shí)間,當(dāng)并發(fā)量比較大的時(shí)候,難堪重負(fù)疲牵。


多線程模型
  1. 有一個(gè)Reactor線程承二,用于監(jiān)聽服務(wù)端ServerSocketChannel,接收客戶端的TCP連接請(qǐng)求纲爸。連接建立以后亥鸠,會(huì)把socketChannel注冊(cè)到worker thread中的selector上。
  2. IO讀寫事件识啦,由一個(gè)線程池worker Thread Pool執(zhí)行负蚊。(讓reactor模型更專注)


    主從多線程模型

這種模型使用了一個(gè)線程池reactor thread poll,這樣就可以監(jiān)聽多個(gè)端口颓哮。


netty線程模型

netty的線程模型與Reactor主從多線程模型類似家妆,有兩個(gè)線程池
bossGroup:如果只有一個(gè)服務(wù)器端口需要監(jiān)聽,則線程數(shù)量設(shè)置為1 冕茅。
workerGroup

通過上圖可知伤极,無(wú)論是哪個(gè)線程池,一個(gè)線程抽象為一個(gè)NioEventLoop姨伤,這是一個(gè)不斷循環(huán)執(zhí)行處理任務(wù)的線程塑荒,每個(gè)NioEventLoop有一個(gè)selector,用于監(jiān)聽綁定在其上的socket鏈路姜挺。
什么是EventLoop齿税?

Will handle all the I/O operations for a {@link Channel} once registered.
One {@link EventLoop} instance will usually handle more than one {@link Channel} but this may depend on implementation details and internals.

每個(gè)NioEventLoop中包含有一個(gè)Selector,一個(gè)taskQueue炊豪,一個(gè)delayedTaskQueue

  1. 串行化設(shè)計(jì):一個(gè)EventLoop可以處理多個(gè)Channel凌箕,是一對(duì)多的關(guān)系。
  2. 定時(shí)任務(wù)與事件輪:

感謝:
netty學(xué)習(xí)系列二:NIO Reactor模型 & Netty線程模型
NIO系列——之Reactor模型

20190808
再度這篇文章词渤,發(fā)現(xiàn)自己好多看不懂牵舱。
每學(xué)習(xí)一個(gè)點(diǎn),總得想想下面幾個(gè)問題缺虐,大概就能厘清問題:

  1. 該技術(shù)在什么場(chǎng)景下會(huì)出現(xiàn)芜壁?用來(lái)解決什么問題?
  2. 空間結(jié)構(gòu)是什么高氮?時(shí)間流程是什么慧妄?

有不明白的一點(diǎn)一點(diǎn)扣,比如java.nio.channels.SelectionKey#OP_READ
參考:https://blog.51cto.com/stevex/1581934

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剪芍,一起剝皮案震驚了整個(gè)濱河市塞淹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罪裹,老刑警劉巖饱普,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件运挫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡套耕,警方通過查閱死者的電腦和手機(jī)谁帕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冯袍,“玉大人雇卷,你說(shuō)我怎么就攤上這事〉吆铮” “怎么了关划?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)翘瓮。 經(jīng)常有香客問我贮折,道長(zhǎng),這世上最難降的妖魔是什么资盅? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任调榄,我火速辦了婚禮,結(jié)果婚禮上呵扛,老公的妹妹穿的比我還像新娘每庆。我一直安慰自己,他們只是感情好今穿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布缤灵。 她就那樣靜靜地躺著,像睡著了一般蓝晒。 火紅的嫁衣襯著肌膚如雪腮出。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天芝薇,我揣著相機(jī)與錄音胚嘲,去河邊找鬼。 笑死洛二,一個(gè)胖子當(dāng)著我的面吹牛馋劈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晾嘶,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妓雾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了变擒?” 一聲冷哼從身側(cè)響起君珠,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寝志,失蹤者是張志新(化名)和其女友劉穎娇斑,沒想到半個(gè)月后策添,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毫缆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年唯竹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苦丁。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浸颓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旺拉,到底是詐尸還是另有隱情产上,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布蛾狗,位于F島的核電站晋涣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沉桌。R本人自食惡果不足惜谢鹊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望留凭。 院中可真熱鬧佃扼,春花似錦、人聲如沸蔼夜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)求冷。三九已至翠订,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遵倦,已是汗流浹背尽超。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梧躺,地道東北人似谁。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掠哥,于是被迫代替她去往敵國(guó)和親巩踏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355