多執行緒設計模式之Worker Thread模式

池塘里洗澡的鸭子發表於2024-06-19

  以前用C/C++寫程序池,要麼一下子fork最大程序數,要麼來一個任務fork一個程序。多執行緒也可以這樣設計,並總結這種模式為Worker Thread模式。

  類圖如下:

            

  具體實現參考如下程式碼(一次性開啟足夠多的執行緒):

  1)Request

            

      Request角色表示工作。Request角色中儲存了工作的邏輯。本例中,Request類對應Request角色。

  2)Client(委託者)

            

      Client角色建立Request角色並將其傳遞給Channel角色。在本例中,ClientThread對應Client角色。

  3)Channel

            

      Channel角色接收來自Client角色的Request角色,並將其傳遞給Worker角色。在本例中, Channel類對應Channel角色。(個人理解:channel就是執行緒池與訊息佇列匹配)。

  4)Worker

            

      Worker角色從Channel角色中獲取Request角色,並執行其邏輯。當一項工作結束後,繼續從Channel獲取另外的Request角色。本例中,WorkerThread類對應Worker角色。

  具體時序圖,如下:

            

  整個過程channel對於實現多執行緒執行多工至關重要!!!

相關文章