溫馨提示×

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

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

什么是Reactor模式

發(fā)布時(shí)間:2021-12-24 09:51:39 來(lái)源:億速云 閱讀:863 作者:小新 欄目:云計(jì)算

這篇文章主要為大家展示了“什么是Reactor模式”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“什么是Reactor模式”這篇文章吧。

 

思維導(dǎo)圖

什么是Reactor模式  
思維導(dǎo)圖
 

一、Reactor模式介紹

1.1 什么是Reactor模式

Reactor模式一般翻譯成"反應(yīng)器模式",也有人稱(chēng)為"分發(fā)者模式"。它是將客戶(hù)端請(qǐng)求提交到一個(gè)或者多個(gè)服務(wù)處理程序的設(shè)計(jì)模式。工作原理是由一個(gè)線(xiàn)程來(lái)接收所有的請(qǐng)求,然后派發(fā)這些請(qǐng)求到相關(guān)的工作線(xiàn)程中。

 

1.2 為什么使用Reactor模式

在java中,沒(méi)有NIO出現(xiàn)之前都是使用socket編程。socket的接收請(qǐng)求是阻塞的,需要處理完一個(gè)請(qǐng)求才能處理下一個(gè)請(qǐng)求,所以在面對(duì)高并發(fā)的服務(wù)請(qǐng)求時(shí),性能就會(huì)很差。

那有人就會(huì)說(shuō)使用多線(xiàn)程(如下圖所示)。接收到一個(gè)請(qǐng)求,就創(chuàng)建一個(gè)線(xiàn)程處理,這樣就不會(huì)阻塞了。實(shí)際上這樣的確是可以在提升性能上起到一定的作用,但是當(dāng)請(qǐng)求很多的時(shí)候,就會(huì)創(chuàng)建大量的線(xiàn)程,維護(hù)線(xiàn)程需要資源的消耗,線(xiàn)程之間的切換也需要消耗性能。而且系統(tǒng)創(chuàng)建線(xiàn)程的數(shù)量也是有限的,所以當(dāng)高并發(fā)時(shí),會(huì)直接把系統(tǒng)拖垮。什么是Reactor模式由于以上的問(wèn)題,提出了Reactor模式。

基于Java,Doug Lea(Java并發(fā)包作者)提出了三種形式,單Reactor單線(xiàn)程,單Reactor多線(xiàn)程和多Reactor多線(xiàn)程。

 

二、Reactor模式的演進(jìn)過(guò)程

在介紹三種Reactor模式前,先簡(jiǎn)單地說(shuō)明三個(gè)角色:

Reactor:負(fù)責(zé)響應(yīng)事件,將事件分發(fā)到綁定了對(duì)應(yīng)事件的Handler,如果是連接事件,則分發(fā)到Acceptor。Handler:事件處理器。負(fù)責(zé)執(zhí)行對(duì)應(yīng)事件對(duì)應(yīng)的業(yè)務(wù)邏輯。Acceptor:綁定了 connect 事件,當(dāng)客戶(hù)端發(fā)起connect請(qǐng)求時(shí),Reactor會(huì)將accept事件分發(fā)給Acceptor處理。

 

2.1 單Reactor單線(xiàn)程

什么是Reactor模式  
 

工作流程

只有一個(gè)select循環(huán)接收請(qǐng)求,客戶(hù)端(client)注冊(cè)進(jìn)來(lái)由Reactor接收注冊(cè)事件,然后再由reactor分發(fā)(dispatch)出去,由下面的處理器(Handler)去處理。

 

通俗解釋

一個(gè)餐廳里只有一個(gè)既是前臺(tái)也是服務(wù)員的人,負(fù)責(zé)接待客人,也負(fù)責(zé)把客人點(diǎn)的菜下達(dá)給廚師。

 

單Reactor單線(xiàn)程的特點(diǎn)

單線(xiàn)程的問(wèn)題實(shí)際上是很明顯的。只要其中一個(gè)Handler方法阻塞了,那就會(huì)導(dǎo)致所有的client的Handler都被阻塞了,也會(huì)導(dǎo)致注冊(cè)事件也無(wú)法處理,無(wú)法接收新的請(qǐng)求。所以這種模式用的比較少,因?yàn)椴荒艹浞掷玫蕉嗪说馁Y源。

這種模式僅僅只能處理Handler比較快速完成的場(chǎng)景。

 

2.2 單Reactor多線(xiàn)程

什么是Reactor模式  
 

工作流程

多線(xiàn)程Reactor中,注冊(cè)接收事件都是由Reactor來(lái)做,其它的計(jì)算,編解碼由一個(gè)線(xiàn)程池來(lái)做。從圖中可以看出工作線(xiàn)程是多線(xiàn)程的,監(jiān)聽(tīng)注冊(cè)事件的Reactor還是單線(xiàn)程。

 

通俗解釋

相當(dāng)于餐廳里有一個(gè)前臺(tái),多個(gè)服務(wù)員。前臺(tái)只負(fù)責(zé)接待客人,服務(wù)員只負(fù)責(zé)服務(wù)客人。

 

單Reactor多線(xiàn)程的特點(diǎn)

對(duì)比單線(xiàn)程Reactor模型,多線(xiàn)程Reactor模式在Handler讀寫(xiě)處理時(shí),交給工作線(xiàn)程池處理,不會(huì)導(dǎo)致Reactor無(wú)法執(zhí)行,因?yàn)镽eactor分發(fā)和Handler處理是分開(kāi)的,能充分地利用資源。從而提升應(yīng)用的性能。

缺點(diǎn):Reactor只在主線(xiàn)程中運(yùn)行,承擔(dān)所有事件的監(jiān)聽(tīng)和響應(yīng),如果短時(shí)間的高并發(fā)場(chǎng)景下,依然會(huì)造成性能瓶頸。

 

2.3 多Reactor多線(xiàn)程

什么是Reactor模式  
 

工作流程

1、mainReactor負(fù)責(zé)監(jiān)聽(tīng)客戶(hù)端請(qǐng)求,專(zhuān)門(mén)處理新連接的建立,將建立好的連接注冊(cè)到subReactor。

2、subReactor 將分配的連接加入到隊(duì)列進(jìn)行監(jiān)聽(tīng),當(dāng)有新的事件發(fā)生時(shí),會(huì)調(diào)用連接相對(duì)應(yīng)的Handler進(jìn)行處理。

 

通俗解釋

相當(dāng)于餐廳里有多個(gè)前臺(tái)和多個(gè)服務(wù)員,前臺(tái)只負(fù)責(zé)接待客人,服務(wù)員只負(fù)責(zé)服務(wù)客人。

 

多Reactor多線(xiàn)程的特點(diǎn)

mainReactor 主要是用來(lái)處理客戶(hù)端請(qǐng)求連接建立的操作。subReactor主要做和建立起來(lái)的連接做數(shù)據(jù)交互和事件業(yè)務(wù)處理操作,每個(gè)subReactor一個(gè)線(xiàn)程來(lái)處理。

這樣的模型使得每個(gè)模塊更加專(zhuān)一,耦合度更低,能支持更高的并發(fā)量。許多框架也使用這種模式,比如接下來(lái)要講的Netty框架就采用了這種模式。

 

三、在Netty中的應(yīng)用

Netty可謂是框架中精品中的極品,要用一張圖或者一段話(huà)來(lái)總結(jié)概括不太可能,所以下面我僅分析一下Netty框架的架構(gòu)模型。在下一篇文章再繼續(xù)深入探究Netty。什么是Reactor模式這個(gè)架構(gòu)實(shí)際上跟多Reactor多線(xiàn)程模型比較像。

1、BossGroup相當(dāng)于mainReactor,負(fù)責(zé)建立連接并且把連接注冊(cè)到WorkGroup中。WorkGroup負(fù)責(zé)處理連接對(duì)應(yīng)的讀寫(xiě)事件。

2、BossGroup和WorkGroup是兩個(gè)線(xiàn)程池,里面有多個(gè)NioEventGroup(實(shí)際上是線(xiàn)程),默認(rèn)BossGroup和WorkGroup里的線(xiàn)程數(shù)是cpu核數(shù)的兩倍(源碼中有體現(xiàn))。

3、每一個(gè)NioEventGroup都是一個(gè)無(wú)限循環(huán),負(fù)責(zé)監(jiān)聽(tīng)相對(duì)應(yīng)的事件。4、Pipeline(通道)里包含多個(gè)ChannelHandler(業(yè)務(wù)處理),按順序執(zhí)行。

以上是“什么是Reactor模式”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

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

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

AI