随笔 - 303  文章 - 0  评论 - 3  阅读 - 15万

多线程设计模式之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   池塘里洗澡的鸭子  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-06-19 关于TP90 TP99 等常用于评估软件系统的处理性能的指标概念
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示