多线程设计模式之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对于实现多线程执行多任务至关重要!!!

            

  测试结果如下:

            

 

posted on 2024-06-19 12:31  池塘里洗澡的鸭子  阅读(20)  评论(0编辑  收藏  举报