首页 > 其他分享 >多线程设计模式之Worker Thread模式

多线程设计模式之Worker Thread模式

时间:2024-06-19 12:43:59浏览次数:22  
标签:设计模式 角色 Request Worker 本例 多线程 Channel

  以前用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对于实现多线程执行多任务至关重要!!!

 

标签:设计模式,角色,Request,Worker,本例,多线程,Channel
From: https://www.cnblogs.com/ilovebath/p/18251887

相关文章

  • C#/.Net 中的多线程介绍和最佳实践
    I/引言计算机中的线程CPU调度程序和时间切片进程和线程并发和并行性异步与多线程在C中使用多线程的好处#II线程C语言#线程生命周期创建、启动和暂停线程加入中止中断线程取消:停止线程的更好方法III/线程问题死锁和争用条件使用Join和LocksAutoRese......
  • 设计模式——单例模式
    单例模式(Singleton)单例模式是一种创建型设计模式,保证一个类只有一个实例,并提供一个访问它的全局访问点单例模式解决了两个问题:保证一个类只有一个实例。控制类的实例数量的常见原因是控制某些共享资源(例如数据库或文件)的访问权限。为该实例提供一个全局访问节点。......
  • HarmonyOS_多线程
    并发是指在同一时间段内,能够处理多个任务的能力。为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,HarmonyOS系统提供了异步并发和多线程并发两种处理策略。异步并发是指异步代码在执行到一定程度后会被暂停,以便在未来某个时间点继续执行,这种情况下,同一时间只有一......
  • 设计模式-策略模式
    策略模式策略模式,又叫政策模式,它是将定义的算法家族分别封装起来,让他们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户,属于行为型模式。角色:上下文角色(Context):用来操作策略的上下文环境,屏蔽高层模块对策略,算法的直接访问,封装可能存在的变化。抽象策略角色(Strateg......
  • Golang与设计模式
    单例模式因为之前研究Java比较多,所以当我试着使用go来实现一些设计模式的时候,首先想到的就是照搬Java中的思路,后面对go了解加深之后又增加了一些新的思路。在Java中实现的单例模式的思路有很多,但是比较好的两个思路是利用类加载机制生成单例对象,check-lock-check机制避免并发问......
  • DolphinScheduler日志乱码、worker日志太多磁盘报警、版本更新导致不兼容怎么办?
    作者|刘宇星本文作者总结了在使用ApacheDolphinScheduler过程中遇见过的常见问题及其解决方案,包括日志出现乱码、worker日志太多磁盘报警、版本更新导致不兼容问题等,快来看看有没有困扰你想要的答案吧!DolphinScheduler集群环境有多台worker(worker1,worker2,worker3),多个......
  • FreeRTOS 体验教程:3.如何用互斥量实现FreeRTOS多线程访问共享资源?
    FreeRTOS互斥量使用教程互斥量(Mutex)是一种特殊的信号量,用于管理对共享资源的访问。在FreeRTOS中,互斥量的句柄类型依然是xSemaphoreHandle。本文将详细介绍如何在FreeRTOS中创建和使用互斥量,并通过实例展示其运行效果。1.创建互斥量在FreeRTOS中,创建互斥量非常简......
  • 面经梳理-java多线程同步协作
    题目Synchronized和ReentryLock锁锁可以视作访问共享数据的许可证。锁能够保护共享数据以实现线程安全,其作用包括保障原子性、保障可见性和保障有序性。Java平台中的锁包括内部锁(IntrinsicLock)和显式锁(ExplicitLock)。内部锁是通过synchronized关键字实现的;显式锁是通过java.ut......
  • 面经梳理-java多线程其他
    题目Threadlocal使用场景?原理?如何保证内存不泄露?ThreadLocal使用场景不加锁的情况下,多线程安全访问共享变量,每个线程保留共享变量的副本(线程特有对象),每个线程往这个ThreadLocal中读写是线程隔离。ThreadLocal原理Thread类有一个类型为ThreadLocal.ThreadLocalMap的实例变量th......
  • 面经梳理-java多线程基础
    题目线程和进程的概念?守护线程是干什么的?常见的守护线程有哪些?线程和进程的概念进程是程序的运行实例,是程序向操作系统申请资源的基本单位,线程是进程的一条执行路径。Java的线程分为两种:用户线程和守护线程。守护线程作用是为其他线程提供服务,如果所有的用户线程死亡,后台线程......