以前用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對於實現多執行緒執行多工至關重要!!!