# 《并发设计模式》第32章-主动对象模式-到底什么是主动对象模式
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★☆☆☆
- 本章重点:初步了解主动模式的应用场景,掌握什么是主动对象模式,重点理解主动对象的核心原理,并能够结合自身项目实际场景思考如何将主动对象模式灵活应用到自身实际项目中。
大家好,我是冰河~~
主动对象模式本质上是一种异步编程模式,通过对方法的调用和方法的执行进行解耦来提升程序的并发度。也就是说,主动对象模式允许方法的调用与方法的执行分离,方法的调用方与方法的执行方在两个不同的线程中执行。
# 一、故事背景
上回说到,小菜开发完成的商品长短链接转换的功能,提测后出现了访问商品资源404的问题,无法在本地环境重现问题,但又苦于自己功力不够,无法很好的从业务和代码角度分析问题,随后找到老王为自己分析出问题所在。分析出问题所在后,老王提及可以使用主动对象模式来解决小菜遇到的问题。那到底什么是主动对象模式呢?以小菜现在功力,根本无法很好的理解主动对象模式,于是,他再次找到老王,诉说了自己的需求,老王再次为其从同步调用、异步调用和主动对象模式等三个方面耐心的讲解了什么是主动对象模式。
# 二、同步调用
不知道大家有没有留意过,其实在我们开发的大部分业务系统的代码中,还是同步调用居多,也就是方法的调用和执行都是在同一个线程中完成的。方法的调用方需要等到方法体执行完成返回结果后,才能返回,如图32-1所示。
可以看到,在同步调用中,方法的调用方法调用方法时,会等到方法体的业务逻辑执行完毕,返回结果后,再返回。整个执行过程都是在同一个线程中执行的。
# 三、异步调用
异步调用是方法的调用方法调用方法后,不必等到方法的业务逻辑执行完毕,就立即返回,由后台的另一个线程执行方法体中的业务逻辑,如图32-2所示。
可以看到,在异步调用中,方法的调用方法调用方法时,方法会将业务逻辑的执行发给某个工作线程,不会等到工作线程执行完毕就立即返回结果。
异步调用能够提升提升方法的吞吐量,但并未缩短方法中业务逻辑的执行时间。
# 四、主动对象模式类结构
主动对象模式又名Object Active模式,本质上就是一种异步调用模式,为了简化异步调用的复杂度,将方法的调用和执行进行了分离,使其处于不同的线程中。使用主动对象模式时,无论是否异步调用,对于方法的调用方来说,都是一样的。并且主动对象模式会包含六大组件,分别为Proxy、Future、MethodRequest、ActivationQueue、Scheduler和Servant,整体类图如图32-3所示。
# 查看全文
加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码