Reactor線程模型的理解


Reactor具體分為三種線程模型

  1. 單Reactor單線程
  2. 單Reactor多線程
  3. 主從Reactor多線程

單Reactor單線程

在單線程模型中Reactor和Acceptor,以及執行任務的線程都在一個線程,當線程在執行耗時的業務處理時,這時的鏈=連接請求或者其他的業務不能及時的處理,當請求並發量比較低的時候還是可以抗住的,一旦高並發,將不堪重負,而且單線程也沒有充分利用多核cpu的特點,浪費了資源

 

單Reactor多線程

在但Reactor多線程模型下,連接請求及acceptor仍然在一個線程,io的read和send操作也是在Reactor線程,但是將業務邏輯處理交給線程池(多線程),此時不管業務操作多耗時,線程里有多個線程來處理任務,任務之間不會有大的延遲處理的影響,但如果並發太高,Reactor線程也來不及連接請求和讀寫數據,於是主從Reactor多線程模型產生

主從Reactor多線程模型

在這個模型中,主要有一個mainReactor,多個subReactor,以及每個subReactor都附帶一個線程池,這個模型大大的分解了各項處理,mainReactor主要負責監聽來自客戶端的請求(即selector.select()),當有連接請求到達,將會調用Acceptor函數(位於mainReactor線程中),並將產生的socketChannel注冊到一個subReactor的selector中,而且綁定該socketChannel感興趣的事件(interestOps),當有該socketChannel感興趣的時間發生時,該subReactor就會調用selector.select()方法,並將需要完成的任務扔到綁定該subReactor的線程池來執行任務,任務結果返回subReactor,然后由subReactor回復客戶端.

自己學習Reactor線程模型的一點小小理解,借助大神doug.lea的三張圖,第一次寫博客,2333.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM