2019-05-08——Java NIO Reactor模式

Reactor

反應(yīng)器設(shè)計模式(Reactor pattern)是一種為處理并發(fā)服務(wù)請求辐怕,并將請求提交到一個或者多個服務(wù)處理程序的事件設(shè)計模式塞帐。當(dāng)客戶端請求抵達后,服務(wù)處理程序使用多路分配策略飞蛹,由一個非阻塞的線程來接收所有的請求姑尺,然后派發(fā)這些請求至相關(guān)的工作線程進行處理。

傳統(tǒng)的并發(fā)處理

傳統(tǒng)的網(wǎng)絡(luò)請求并發(fā)處理是為每一個socket開啟一個線程


image.png

該模式的缺點顯而易見:
1并蝗、當(dāng)請求比較多時祭犯,系統(tǒng)的性能會下降,因為創(chuàng)建和回收線程會消耗資源
2滚停、當(dāng)請求激增時沃粗,由于系統(tǒng)資源有限,請求可能會被阻塞
3键畴、當(dāng)請求處于I/O阻塞的時候最盅,系統(tǒng)的資源被浪費了

Reactor設(shè)計模式

為了解決傳統(tǒng)的多線程處理并發(fā)請求的缺陷,設(shè)計人員采用一種基于事件驅(qū)動的設(shè)計模式起惕,這就是Reactor涡贱。

  • Reactor是采用基于事件驅(qū)動的設(shè)計,當(dāng)有事件觸發(fā)時惹想,才會調(diào)用處理器進行數(shù)據(jù)處理问词。


    image.png
  • 通過改進使用多線程處理業(yè)務(wù)邏輯


    image.png
  • 對于多個CPU的機器,為充分利用系統(tǒng)資源嘀粱,將Reactor拆分為兩部分激挪。


    image.png

Reactor模式結(jié)構(gòu)

image.png

Reactor模式主要有一下幾個角色:

  • Handle: 是事件的發(fā)源地,比如一個網(wǎng)絡(luò)socket草穆、磁盤文件等灌灾。而發(fā)生在handle上的事件可以有connection、ready for read悲柱、ready for write等锋喜。
  • Synchronous Event Demultiplexer:同步事件分離器,本質(zhì)上是系統(tǒng)調(diào)用豌鸡。阻塞等待一系列的Handle中的事件到來嘿般,如果阻塞等待返回,即表示在返回的Handle中可以不阻塞的執(zhí)行返回的事件類型涯冠。這個模塊一般使用操作系統(tǒng)的select來實現(xiàn)炉奴。
  • Initiation Dispatcher:初始分發(fā)器,也是reactor角色蛇更,提供了注冊瞻赶、刪除與轉(zhuǎn)發(fā)event handler的方法赛糟。當(dāng)Synchronous Event Demultiplexer檢測到handle上有事件發(fā)生時,便會通知initiation dispatcher調(diào)用特定的event handler的回調(diào)方法砸逊。
  • Event Handler事件處理器璧南,其會定義一些回調(diào)方法或者稱為鉤子函數(shù),當(dāng)handle上有事件發(fā)生時师逸,回調(diào)方法便會執(zhí)行司倚,一種事件處理機制。
  • Concrete Event Handler:具體的事件處理器篓像,實現(xiàn)了Event Handler动知。

在處理web請求時,通常有兩種體系結(jié)構(gòu)员辩,分別為:thread-based architecture(基于線程)盒粮、event-driven architecture(事件驅(qū)動)

事件驅(qū)動體系結(jié)構(gòu)是目前比較廣泛使用的一種。這種方式會定義一系列的事件處理器來響應(yīng)事件的發(fā)生屈暗,并且將服務(wù)端接受連接與對事件的處理分離拆讯。其中,事件是一種狀態(tài)的改變养叛。比如种呐,tcp中socket的new incoming connection、ready for read弃甥、ready for write爽室。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淆攻,隨后出現(xiàn)的幾起案子阔墩,更是在濱河造成了極大的恐慌,老刑警劉巖瓶珊,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啸箫,死亡現(xiàn)場離奇詭異,居然都是意外死亡伞芹,警方通過查閱死者的電腦和手機忘苛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唱较,“玉大人扎唾,你說我怎么就攤上這事∧匣海” “怎么了胸遇?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長汉形。 經(jīng)常有香客問我纸镊,道長倍阐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任薄腻,我火速辦了婚禮收捣,結(jié)果婚禮上届案,老公的妹妹穿的比我還像新娘庵楷。我一直安慰自己,他們只是感情好楣颠,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布尽纽。 她就那樣靜靜地躺著,像睡著了一般童漩。 火紅的嫁衣襯著肌膚如雪弄贿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天矫膨,我揣著相機與錄音差凹,去河邊找鬼。 笑死侧馅,一個胖子當(dāng)著我的面吹牛危尿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播馁痴,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼谊娇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罗晕?” 一聲冷哼從身側(cè)響起济欢,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎小渊,沒想到半個月后法褥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡酬屉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年半等,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梆惯。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酱鸭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垛吗,到底是詐尸還是另有隱情凹髓,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布怯屉,位于F島的核電站蔚舀,受9級特大地震影響饵沧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赌躺,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一狼牺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧礼患,春花似錦是钥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肤粱,卻和暖如春弹囚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背领曼。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庶骄,地道東北人毁渗。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像瓢姻,于是被迫代替她去往敵國和親祝蝠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1幻碱、基礎(chǔ)I/O模型 在《UNIX網(wǎng)絡(luò)編程》中介紹了5中I/O模型:阻塞I/O绎狭、非阻塞I/O、I/O復(fù)用褥傍、SIGIO...
    橋頭放牛娃閱讀 3,561評論 3 14
  • 何為Reactor線程模型儡嘶? Reactor模式是事件驅(qū)動的,有一個或多個并發(fā)輸入源恍风,有一個Service Han...
    未名枯草閱讀 3,498評論 2 11
  • 趁著三天假期蹦狂,把Java NIO和Reactor模式整理總結(jié)了下,文章特別細(xì)節(jié)的知識點沒有寫朋贬,如一些API的具體實...
    CoderGenuine閱讀 282評論 0 0
  • reactor Understanding Reactor Pattern with Java NIOreacto...
    礪豪閱讀 2,304評論 0 1
  • 月光 霓虹燈 還有風(fēng)的聲音 我望著天空的星星 找到那雙最像你的眼睛 在冷風(fēng)中呵成愛你的形狀 然后又偷偷裝進口袋里 ...
    飛鳥的憂傷閱讀 134評論 0 0