异步编程模型演绎

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 掘金小册子


以上是关于异步编程模型演绎的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫编程思想(26):Twisted的异步编程模型

异步编程模型

低功耗设计的最佳编程模型:异步编程

异步编程指南

思考!低功耗设计的最佳编程模型:异步编程

异步编程如何在单线程编程模型中工作?