多线程设计模式之Worker Thread模式
以前用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对于实现多线程执行多任务至关重要!!!
测试结果如下: