Reactor執行緒模型

2021-08-06 04:55:42 字數 1262 閱讀 6112

首先要需要說明的是,reactor執行緒模型並不是netty所獨有,其是一種併發程式設計模型,更確切的或者說一種思想,其具有的是指導意義,開發者需要在這種程式設計模型思想的指導下,結合自己的實際場景,來進行合理的設計。在不同的場景下,可能設計出來的reactor執行緒模型是不一樣的,例如scala中的akka框架,就是基於reactor執行緒模型的思想設計的。換句話說,netty只是結合了nio網路程式設計的特點,合理的應用了reactor執行緒模型

。關於netty是如何合理的利用reactor執行緒模型,將在之後講解。

現在我們還是需要簡單的介紹一下有哪些典型的reactor執行緒模型設計方式。回顧序列工作者模型和並行工作者模型,它們主要的關注點是:劃分任務的接受階段與任務的處理階段。也正是因為如此,我們通常將接受任務的執行緒稱之為accpet thread。而任務的處理過程都是乙個執行緒(worker thread)內完成的。

reactor執行緒模型關注的是:任務接受之後,對處理過程繼續進行切分,劃分為多個不同的步驟,每個步驟用不同的執行緒來處理,也就是原本由乙個執行緒處理的任務現在由多個執行緒來處理,每個執行緒在處理完自己的步驟之後,還需要將任務**到執行緒繼續進行處理。為了進行區分,在reactor執行緒模型中,處理任務並且分發的執行緒,不再稱之為worker thread,而是reactor thread

2.1 單執行緒reactor執行緒模型

下圖演示了單執行緒reactor執行緒模型,之所以稱之為單執行緒,還是因為只有乙個accpet thread接受任務,之後**到reactor執行緒中進行處理。兩個黃色框表示的是reactor thread group,裡面有多個reactor thread。乙個reactor thread group中的reactor thread功能都是相同的,例如第乙個黃色框中的reactor thread都是處理拆分後的任務的第一階段,第二個黃色框中的reactor thread都是處理拆分後的任務的第二步驟。任務具體要怎麼拆分,要結合具體場景,下圖只是演示作用。一般來說,都是以比較耗時的操作(例如io)為切分點。

特別的,如果我們在任務處理的過程中,不劃分為多個階段進行處理的話,那麼單執行緒reactor執行緒模型就退化成了並行工作和模型。事實上,可以認為並行工作者模型,就是單執行緒reactor執行緒模型的最簡化版本。

2.2 多執行緒reactor執行緒模型

所謂多執行緒reactor執行緒模型,無非就是有多個accpet執行緒,如下圖中的虛線框中的部分。

2.3 混合型reactor執行緒模型

混合型reactor執行緒模型,實際上最能體現reactor執行緒模型的本質:

多執行緒reactor模型

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

NIO實現Reactor單執行緒模型

寫這個模型需要提前了解selector以及channel,之前記錄過filechannel,除此之外還有以下幾種channel serversocketchannel 用於監聽新的tcp連線的通道,負責讀取 響應,通常用於服務端的實現。socketchannel 用於發起tcp連線,讀寫網路中的資料...

reactor模型 生動形象

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