多线程设计模式之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对于实现多线程执行多任务至关重要!!!
测试结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-06-19 关于TP90 TP99 等常用于评估软件系统的处理性能的指标概念