中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

什么是Reactor模式

發布時間:2021-12-24 09:51:39 來源:億速云 閱讀:879 作者:小新 欄目:云計算

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

 

思維導圖

什么是Reactor模式  
思維導圖
 

一、Reactor模式介紹

1.1 什么是Reactor模式

Reactor模式一般翻譯成"反應器模式",也有人稱為"分發者模式"。它是將客戶端請求提交到一個或者多個服務處理程序的設計模式。工作原理是由一個線程來接收所有的請求,然后派發這些請求到相關的工作線程中

 

1.2 為什么使用Reactor模式

在java中,沒有NIO出現之前都是使用socket編程。socket的接收請求是阻塞的,需要處理完一個請求才能處理下一個請求,所以在面對高并發的服務請求時,性能就會很差。

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

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

 

二、Reactor模式的演進過程

在介紹三種Reactor模式前,先簡單地說明三個角色:

Reactor:負責響應事件,將事件分發到綁定了對應事件的Handler,如果是連接事件,則分發到Acceptor。Handler:事件處理器。負責執行對應事件對應的業務邏輯。Acceptor:綁定了 connect 事件,當客戶端發起connect請求時,Reactor會將accept事件分發給Acceptor處理。

 

2.1 單Reactor單線程

什么是Reactor模式  
 

工作流程

只有一個select循環接收請求,客戶端(client)注冊進來由Reactor接收注冊事件,然后再由reactor分發(dispatch)出去,由下面的處理器(Handler)去處理。

 

通俗解釋

一個餐廳里只有一個既是前臺也是服務員的人,負責接待客人,也負責把客人點的菜下達給廚師。

 

單Reactor單線程的特點

單線程的問題實際上是很明顯的。只要其中一個Handler方法阻塞了,那就會導致所有的client的Handler都被阻塞了,也會導致注冊事件也無法處理,無法接收新的請求。所以這種模式用的比較少,因為不能充分利用到多核的資源。

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

 

2.2 單Reactor多線程

什么是Reactor模式  
 

工作流程

多線程Reactor中,注冊接收事件都是由Reactor來做,其它的計算,編解碼由一個線程池來做。從圖中可以看出工作線程是多線程的,監聽注冊事件的Reactor還是單線程。

 

通俗解釋

相當于餐廳里有一個前臺,多個服務員。前臺只負責接待客人,服務員只負責服務客人。

 

單Reactor多線程的特點

對比單線程Reactor模型,多線程Reactor模式在Handler讀寫處理時,交給工作線程池處理,不會導致Reactor無法執行,因為Reactor分發和Handler處理是分開的,能充分地利用資源。從而提升應用的性能。

缺點:Reactor只在主線程中運行,承擔所有事件的監聽和響應,如果短時間的高并發場景下,依然會造成性能瓶頸。

 

2.3 多Reactor多線程

什么是Reactor模式  
 

工作流程

1、mainReactor負責監聽客戶端請求,專門處理新連接的建立,將建立好的連接注冊到subReactor。

2、subReactor 將分配的連接加入到隊列進行監聽,當有新的事件發生時,會調用連接相對應的Handler進行處理。

 

通俗解釋

相當于餐廳里有多個前臺和多個服務員,前臺只負責接待客人,服務員只負責服務客人。

 

多Reactor多線程的特點

mainReactor 主要是用來處理客戶端請求連接建立的操作。subReactor主要做和建立起來的連接做數據交互和事件業務處理操作,每個subReactor一個線程來處理。

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

 

三、在Netty中的應用

Netty可謂是框架中精品中的極品,要用一張圖或者一段話來總結概括不太可能,所以下面我僅分析一下Netty框架的架構模型。在下一篇文章再繼續深入探究Netty。什么是Reactor模式這個架構實際上跟多Reactor多線程模型比較像。

1、BossGroup相當于mainReactor,負責建立連接并且把連接注冊到WorkGroup中。WorkGroup負責處理連接對應的讀寫事件。

2、BossGroup和WorkGroup是兩個線程池,里面有多個NioEventGroup(實際上是線程),默認BossGroup和WorkGroup里的線程數是cpu核數的兩倍(源碼中有體現)。

3、每一個NioEventGroup都是一個無限循環,負責監聽相對應的事件。4、Pipeline(通道)里包含多個ChannelHandler(業務處理),按順序執行。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁南县| 平阳县| 曲周县| 龙陵县| 民丰县| 天柱县| 随州市| 依安县| 天水市| 华亭县| 蒙阴县| 图片| 罗山县| 青田县| 遂宁市| 永嘉县| 丹寨县| 河曲县| 潜江市| 鲁甸县| 北辰区| 荆州市| 化州市| 高陵县| 米脂县| 祥云县| 青神县| 信阳市| 信宜市| 宾阳县| 许昌市| 淳安县| 三明市| 廊坊市| 和政县| 汝阳县| 安新县| 江津市| 西丰县| 雷波县| 额尔古纳市|