Reactor反應器模式
反應器模式由Reactor反應器執行緒、Handlers處理器兩大角色組成:
- Reactor反應器執行緒的職責:負責回應IO事件,并且分發到Handlers處理器,負責查詢IO事件,當檢測到一個IO事件,將其發送給相應的Handler處理器去處理,這里的IO事件,就是NIO中選擇器監控的通道IO事件,
- Handlers處理器的職責:非阻塞的執行業務處理邏輯,與IO事件(或者選擇鍵)系結,負責IO事件的處理,完成真正的連接建立、通道的讀取、處理業務邏輯、負責將結果寫出到通道等,
OIO中用創建一個執行緒處理一個連接請求(Connection Per Thread),這樣在一個業務沒有處理完時不會阻塞其他請求的接收,但是頻繁創建銷毀切換執行緒有很大的代價,耗費大量的執行緒資源,
單執行緒版Reactor:
單執行緒處理事件監聽并在同一個執行緒中處理業務資料,所以一旦某個handler業務阻塞,則其他所以的handler都無法得到執行,單執行緒模型也無法充分利用系統多核資源,

多執行緒的Reactor反應器:
升級Handler處理器,使用執行緒池,多執行緒,又要盡可能的高效率,
升級Reactor反應器,引入多個Selector選擇器,提升選擇大量通道的能力,
業務處理執行緒與負責服務監聽和IO事件查詢的反應器執行緒相隔離,避免服務器的連接監聽受到阻塞,如果多核的CPU,可將反應器執行緒拆分為多個子反應器(SubReactor)執行緒,

反應器模式的優點和缺點:
優點
回應快,雖然同一反應器執行緒本身是同步的,但不會被單個連接的同步IO所阻塞;
編程相對簡單,最大程度避免了復雜的多執行緒同步,也避免了多執行緒的各個行程之間切換的開銷;
可擴展,可以方便地通過增加反應器執行緒的個數來充分利用CPU資源,
缺點
反應器模式增加了一定的復雜性,因而有一定的門檻,并且不易于除錯,
反應器模式需要作業系統底層的IO多路復用的支持,如Linux中的epoll,如果作業系統的底層不支持IO多路復用,反應器模式不會有那么高效,
同一個Handler業務執行緒中,如果出現一個長時間的資料讀寫,會影響這個反應器中其他通道的IO處理,
充分利用系統資源,最大限度減少阻塞,
反應器模式與生產者消費者
反應器模式與觀察著模式
代碼整理
時間換空間,空間換時間
閱讀筆記 《Netty、Redis、Zookeeper高并發實戰》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/116789.html
標籤:Java
上一篇:Mybatis
下一篇:PHP創建物件的6種方式
