异步编程模型演绎
Posted CodeThings
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步编程模型演绎相关的知识,希望对你有一定的参考价值。
本文仅是对众多编程思维中的异步编程模型的小结。从轮询到观察者模式,从观察者模式到订阅者模式,从订阅者模式到事件模型,从事件模型到生产者消费者模型。
观察者模式
通过接口回调实现
订阅者模式
当有多个观察者时,观察者模式演变为订阅者模式
事件模式
当有订阅内容复杂时,通过事件来分类订阅内容,订阅者模式演变为事件监听模式
生产者消费者模型
一个个事件就像生产者生产的物件,监听器消费这一个个事件。此时事件模式演变为生产者消费者模型。
理想情况定义为:生产者生产的事件刚好够消费者消费。我们的目的是顺利的消费。
一次完整的事件消费过程定义为:事件从生产者生产出来时刻开始,流转到消费者,到被消费者消费完毕时刻截止。所以事件执行顺序是从生产者到消费者。
当生产得慢,消费得快时。一次完整事件消费过程能顺利的进行。
举个例子,假如生产者每10s产出一个事件,消费者每1s消费完一个事件。从时刻0秒到11秒,前10秒(时刻0-10秒)生产者生产了一个事件,随后的1秒(时刻10-11秒)消费者完成事件消费。
当生产得快,消费得慢时,出现事件积压。
举个例子,假如生产者每1s产出一个事件,消费者每10s消费完一个事件。从时刻0秒到1秒,生产者生产了1个事件。随后的10s(从时刻1s到11s),生产者又生产了10事件,消费者完成了对第一个事件的消费。第11s时刻,共积压了10事件。
我们用一个队列容器,把积压的这10个事件先存储起来。随着时间的推移积压的事件越来越多,队列容量会变得原来越大。
降低生产者生产速度,令其每10s生产一个事件,达到了理想情况。
提高消费者消费速度,令其达到每1s消费一个事件,我们达到了理想情况。
现实编程场景中,消费行为是由调用者定义的。我们只能改变生产者这一端。依据消费者的消费速度,改变生产者的生产速度,令生产者的生产速度小于或等于消费者的消费速度。生产慢点,消费快点。生产时间久点,消费时间短点。
小结
从Pull,到Push,进而发展到Reactive Pull,这是异步模型中,数据处理方式的三次重要的进化。
参考资料 & 鸣谢
响应式编程—RxJava 高阶指南 by 拉丁吴 in 掘金小册子
以上是关于异步编程模型演绎的主要内容,如果未能解决你的问题,请参考以下文章