多线程设计模式
布鲁斯1990
专注于微服务,DevOps, Linux
Github: https://github.com/Guilai1990/
展开
-
多线程设计模式-不可变对象模式
定义: 将现实世界中状态可变的实体建模为状态不可变对象,并通过创建不同的状态不可变的对象来反映实现世界实体的状态变更不可变对象模式UML图ImmutableObject:负责存储一组不可变状态。该参与者不对外暴露任何可以修改其状态的方法 getStateX, getStateN:这些getter方法返回其所属ImmutableObject实例所维护的状态相关变量的值。这些变量在对...原创 2019-06-07 01:15:46 · 214 阅读 · 0 评论 -
多线程设计模式-半同步/半异步模式
定义: 一个分层架构,将系统中的任务进行恰当地分解,使各个子任务落入合适的层次中半同步/半异步模式UML图AsyncTask: 异步任务,负责接收来自客户端的输入,对其进行初步处理,并通过队列与相应的同步任务通信 dispatch: 对输入进行初步处理,并构造相应消息放入队列由相应的同步任务进行处理Queue: 队列,异步任务层和同步任务层进行通信的中介 enqu...原创 2019-06-09 00:07:59 · 382 阅读 · 0 评论 -
多线程设计模式-主动对象模式
定义: 一种异步编程模式,允许任务的提交(对异步方法的调用)和任务的执行(异步方法的真正执行)分离主动对象模式UML图Proxy: 负责对外暴露异步方法接口 asyncService: 该异步方法负责创建与该方法相应的MethodRequest参与者实例,并将其提交给Scheduler参与者实例。该方法的返回值是一个Future参与者实例,客户端代码可以通过它获取异步方法对应的任...原创 2019-06-08 23:57:59 · 281 阅读 · 0 评论 -
多线程设计模式-线程池模式
定义:使用极其有限的资源(线程池)去处理相对无限的任务线程池模式UML图ThreadPool: 负责接收和存储任务以及工作者线程的生命周期管理 submit: 用于接收一个任务,客户端代码调用该方法向线程池提交一个任务 shutdown: 关闭线程池对外提供的服务Promise: 获取相应任务执行结果的凭据对象 getResult: 获取相应任务的执行结果...原创 2019-06-08 23:18:32 · 914 阅读 · 0 评论 -
多线程设计模式-生产者/消费者模式
定义:通过通道对数据(或任务)的生产者和消费者进行解耦,使二者不直接交互,从而使二者的处理速率相对来说互不影响。生产者消费模式UML图Producer: 生产者,负责生产相应的“产品”并将其存入通道 service: 生产者对外暴露的服务方法Product: 生产者所“生产”的数据或者任务Channel: 对通道的抽象。通道充当生产者和消费者之间的缓冲区用于“产品”传递,它可...原创 2019-06-08 22:53:43 · 429 阅读 · 0 评论 -
多线程设计模式-线程特有存储模式
定义:通过不共享变量实现线程安全,并规避锁的消耗及相关锁带来的问题线程特有存储模式UML图ApplicationThread: 线程持有存储模式的客户端,表示各个应用线程TSObjectProxy: 用于访问线程特有对象的代理对象 getThreadSpecific: 获取与其所属TSObjectProxy实例相关联的线程特有对象实例 setThreadSpecifi...原创 2019-06-08 19:06:17 · 244 阅读 · 0 评论 -
多线程设计模式-串行线程封闭模式
定义:通过将多个并发的任务存入队列实现任务的串行化,并为这些串行化的任务创建唯一的一个工作者线程进行处理由于只有唯一的工作者线程访问,对其的访问无须加锁,因此避开了锁的的开销和锁带来的问题串行线程封闭模式Serializer: 负责对外暴露服务接口以及工作者线程的生命周期管理,并将客户端对其的并发任务调用转换为相应的任务以实现服务串行化 service: 表示将串...原创 2019-06-08 18:18:40 · 515 阅读 · 0 评论 -
多线程设计模式-主仆模式
定义:将一个任务(原始任务)分解为若干个语义等同的子任务,并由专门的工作者线程来并行执行子任务主从模式UML图Master: 负责原始任务的分解、子任务的派发和子任务处理结果的合并 service: Master参与者对外暴露的接口,用于接收原始任务,并返回其处理结果 splitWork: 将原始任务分解成若干个语义等同的子任务 callSlaves: 将各个子任...原创 2019-06-08 12:51:54 · 894 阅读 · 0 评论 -
多线程设计模式-承诺模式
定义:这是一种异步编程模式,先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作。等到需要该任务的执行结果时,再调用凭据对象的相关方法来获取承诺模式UML图Promiser: 负责对外暴露可以返回的Promise对象的异步方法,并启动异步任务的执行 compute: 启动异步任务的执行,并返回用于获取异步任务执行结果的凭...原创 2019-06-08 05:20:21 · 434 阅读 · 0 评论 -
多线程设计模式-两阶段终止模式
定义:通过将停止线程这个动作分解为准备阶段和执行阶段两个阶段,提供了一种通用的用于优雅地停止线程的方法准备阶段:“通知”目标线程(欲停止的线程)准备进行停止,会设置一个标志变量用于指示目标线程可以准备停止了停止阶段:检查准备阶段所设置的线程停止标志和信号,在此基础上决定线程停止的时机,并进行适当的“清理”操作两阶段终止模式UML图ThreadOwner: 目标线程的拥有者。一般讲目标...原创 2019-06-07 02:38:05 · 668 阅读 · 0 评论 -
多线程设计模式-保护性暂挂模式
定义:如果某个线程执行特定的操作前需要满足一定的条件,则在该条件未满足时将该线程暂停运行(即暂挂线程,使其处于等待状态,直到该条件满足时才继续该线程的运行)保护性暂挂模式UML图GuardedObject: 包含受保护方法的对象 guardedMethod: 受保护方法 stateChanged: 改变GuardedObject实例状态的方法。该方法负责在保护条件成...原创 2019-06-07 01:23:09 · 1398 阅读 · 0 评论 -
多线程设计模式综述
由于多核CPU已经成了每台电脑的标配,计算机性能大大提高,随之带来的是程序员对多核的高效利用,也就是多并发编程。显然,多并发编程大大提高了系统的吞吐率,使得高并发不再遥不可及。但与此同时,也带来了很多令人头疼的问题。为了解决多线程编程带来的问题(如线程安全问题、死锁问题、内存溢出等),通过一些多线程设计模式可以巧妙的避开或者解决这些问题。我们可以在大量的分布式中间件(比如RocketMQ)...原创 2019-06-05 05:32:10 · 196 阅读 · 0 评论