【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
文章目錄
- 一、 反應器 ( Reactor ) 模式
- 二、 反應器 ( Reactor ) 模式兩大組件
- 三、 單反應器 ( Reactor ) 單線程
- 四、 單反應器 ( Reactor ) 單線程 與 NIO 模型對應關系
- 五、 單反應器 ( Reactor ) 單線程優缺點分析
- 六、 單反應器 ( Reactor ) 多線程
- 七、 單反應器 ( Reactor ) 多線程優缺點分析
一、 反應器 ( Reactor ) 模式
反應器 ( Reactor ) 模式 簡介 :
① 基于事件驅動 : 多個客戶端同時向服務器端傳遞數據 , 每個客戶端傳遞數據的行為都稱為一個事件 , 每個事件都會觸發相應操作 ;
② 服務器端處理事件 : 服務器端接收到多個客戶端發送的事件請求 , 將這些事件對應的操作分發給對應的線程進行處理 ; 反應器 ( Reactor ) 模式 , 又稱為 分發者 ( Dispatcher ) 模式 ;
反應器 ( Reactor ) 模式 中監聽客戶端請求事件 , 服務器端監聽到事件后 , 將事件分發給指定的線程處理 ( 可以是唯一的一個 , 也可以是多個線程中的一個 ) ;
二、 反應器 ( Reactor ) 模式兩大組件
反應器 ( Reactor ) 模式 涉及到兩個組件 , 反應器 ( Reactor ) 組件 和 處理者 ( Handler ) 組件 ;
1 . 反應器 ( Reactor ) 組件 : 該組件調度分發事件給 處理者 ( Handler ) 組件 , 處理與相應客戶端的 IO 事件 ;
① 運行線程 : 反應器 ( Reactor ) 在獨立線程中運行 , 該線程只負責事件相關的監聽與分發操作 , 不處理具體的業務邏輯 ;
② 監聽事件 : 反應器 ( Reactor ) 在線程中監聽客戶端的請求事件 ;
③ 分發事件 : 反應器 ( Reactor ) 監聽到事件后 , 將事件分發給其 處理者 ( Handler ) 組件 處理實際的業務邏輯 ;
2 . 處理者 ( Handler ) 組件 : 該 Handler 組件用于 處理實際的業務邏輯 ;
三、 單反應器 ( Reactor ) 單線程
1 . 單 反應器 ( Reactor ) 單 線程 模型 :
① 客戶端 : 向服務器發送請求事件 ;
② 服務器端 反應器 ( Reactor ) : 有兩個功能 , 監聽 ( Select ) 和 分發 ( Dispatch ) , 監聽客戶端請求事件 , 獲取到事件后 , 將事件分發給 接受者 ( Acceptor ) 或 處理者 ( Handler ) ;
③ 服務器端 接受者 ( Acceptor ) : 負責處理客戶端與服務器端建立 Socket 連接的操作 ;
④ 服務器端 處理者 ( Handler ) : 負責與客戶端的數據交互 , 執行實際業務處理操作 , 調用 read 方法讀取客戶端上傳的數據 , 并進行相應的業務處理 , 調用 write 方法將服務器的反饋數據發送給客戶端 ; ( 讀取客戶端數據 -> 執行業務處理操作 -> 將結果回送給客戶端 )
四、 單反應器 ( Reactor ) 單線程 與 NIO 模型對應關系
NIO 服務器與客戶端通信 , 與上面的 反應器 ( Reactor ) 模式 是對應的 :
① 反應器 ( Reactor ) : NIO 中的 選擇器 ( Selector ) 對應 反應器 ( Reactor ) ;
② 接受者 ( Acceptor ) : 反應器 ( Reactor ) 模式中的 接受者 ( Acceptor ) , 對應 NIO 中處理客戶端與服務器端的連接事件 ;
③ 處理者 ( Handler ) : NIO 中的選擇器 ( Selector ) 監聽讀取數據事件并進行相應處理 , 對應 處理者 ( Handler ) ;
五、 單反應器 ( Reactor ) 單線程優缺點分析
1 . 單反應器 ( Reactor ) 單線程 優點 : 單個線程實現 , 模型簡單 , 不用考慮線程通信 , 線程同步等問題 ;
2 . 單 反應器 ( Reactor ) 單 線程 模型 弊端 : 除了簡單之外 , 全是問題 ;
① 容易出現阻塞 : 該模式下 , 只有一個線程 , 處理者 ( Handler ) 每次只能處理一個客戶端的請求事件 , 如果客戶端數量很多 , 出現高并發情況 , 只能阻塞等待前面的 處理者 ( Handler ) 將事件處理完畢 , 才能輪到后面的事件開始處理 ;
② 服務器性能 : 一般的服務器都是多核多線程 CPU , 只跑一個線程 , 浪費了大量服務器性能 ;
③ 處理延遲 : 當 處理器 ( Handler ) 處理一個客戶端的業務邏輯時 , 無法及時響應其它客戶端的連接 , 造成延遲 ;
④ 可靠性問題 : 如果僅有的一個線程運行出現異常 , 整個程序都崩了 ;
3 . 單反應器 ( Reactor ) 單線程 模型 適用場景 : 不容易出現堵塞的場景 , 即連接少 , 處理速度快 的場景 ;
① 客戶端數量較少 : 客戶端少 , 連接少 , 并發數量不高 ;
② 業務處理速度快 : 每個客戶端連接執行的都是耗時較少的操作 ;
六、 單反應器 ( Reactor ) 多線程
1 . 單 反應器 ( Reactor ) 單 線程 模型 :
① 客戶端 : 向服務器發送請求事件 ;
② 服務器端 反應器 ( Reactor ) : 該反應器 ( Reactor ) 占用一個單獨的線程 , 反應器 ( Reactor ) 有兩個功能 , 監聽 ( Select ) 和 分發 ( Dispatch ) , 監聽客戶端請求事件 , 獲取到事件后 , 將事件分發給 接受者 ( Acceptor ) 或 處理者 ( Handler ) ;
- 建立連接請求 , 分發 ( Dispatch ) 給 接受者 ( Acceptor ) ;
- 處理與客戶端業務邏輯 , 分發給 處理者 ( Handler ) ;
③ 服務器端 接受者 ( Acceptor ) : 負責處理客戶端與服務器端建立 Socket 連接的操作 ;
④ 服務器端 處理者 ( Handler ) : Handler 只負責響應業務處理的請求事件 , 不處理具體的與客戶端交互的業務邏輯 , 因此不會長時間阻塞 , 其調用 read 方法讀取客戶端數據后 , 將業務邏輯交給 線程池 ( Worker ) 處理相關業務邏輯 , 處理完畢后 , 將結果返回 , Handler 將該結果寫出到客戶端 ;
⑤ 服務器端 線程池 ( Worker ) : 接收 處理者 ( Handler ) 的請求 , 為將請求對應業務邏輯操作 , 分配給某個獨立線程完成 , 執行完成后的結果再次返回給 處理者 ( Handler ) ,
( Handler 讀取客戶端數據 -> Worker 線程池分配線程執行業務處理操作 -> Handler 將結果回送給客戶端 )
七、 單反應器 ( Reactor ) 多線程優缺點分析
1 . 單反應器 ( Reactor ) 多線程 優點 : 充分發揮出服務器多核多線程 CPU 的優勢 , 根據 CPU 性能定制線程個數 , 沒有性能上的浪費 ;
2 . 單反應器 ( Reactor ) 多線程 缺點 :
① 數據同步 : 線程池 ( Worker ) 中的多個業務邏輯處理線程 , 需要與 處理器 ( Handler ) 共享數據 , 涉及到數據跨線程傳輸訪問 , 比較復雜 ;
② 反應器 ( Reactor ) 負載較大 : 反應器 ( Reactor ) 處理所有的客戶端的事件的監聽與分發操作 , 其 在單線程中運行 , 如果并發數量很高 , 也是有線程堵塞的性能瓶頸產生 ;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Netty】Netty 简介 ( 原生
- 下一篇: 【Netty】主从反应器 ( React