Reactor網路程式設計模型

2021-10-20 16:12:14 字數 581 閱讀 3715

每接收乙個客戶端的請求,服務端都會建立乙個執行緒來處理。這種就是同步阻塞 i/o 模式,開發維護成本比較小,適合連線數比較少的服務。

既然每個請求分配乙個執行緒不合適,怎樣才能乙個執行緒中處理多個請求?我們可採用分治的思想,將處理流程拆分成更小的任務,減少每個執行緒的阻塞時間,基於事件驅動 。

這裡 reactor 是單執行緒的,接收所有的客戶端請求,連線請求分配給 acceptor,資料處理分配給處理的執行緒。

將業務處理執行緒與 i/o 處理拆分開,這樣就可以避免 reactor 執行緒由於業務處理造成阻塞,同樣業務執行緒也不會受 reactor 網路讀取和傳送的影響。

mainreactor:負責監聽收客戶端的連線。對應 netty 中的 bossgroup,一般乙個執行緒就夠了。

subreactor:負責讀取傳送資料,將請求分配給業務執行緒池。對應 netty 中的 workergroup。

Reactor執行緒模型

首先要需要說明的是,reactor執行緒模型並不是netty所獨有,其是一種併發程式設計模型,更確切的或者說一種思想,其具有的是指導意義,開發者需要在這種程式設計模型思想的指導下,結合自己的實際場景,來進行合理的設計。在不同的場景下,可能設計出來的reactor執行緒模型是不一樣的,例如scala中...

reactor模型 生動形象

網上有很多講解reactor模型的,我還是看了比較久才稍微領悟一點意思,那麼我就舉個例子講講自己的理解。我們首先先結合nio 多路復用的知識,做乙個比喻。大前提 餐館的服務員現在假設只有乙個 還需要兼職廚師 那麼當乙個客人來了之後,服務員會把選單給客人,然後就走開去迎接其他客人,當有客人點好餐的時候...

多執行緒reactor模型

reactor 多執行緒的實現最大的區別是擁有乙個專門用來處理實際i o 操作是執行緒池 優點 1 擁有乙個acceptor 專門用來監聽請求的i o 型別 2 使用專門執行緒池可以提高acceptor的併發量,並且可以將同乙個socketchannel 放於同乙個i o 執行緒處理,同乙個i o執...