标签:互斥锁 span 缓冲区 线程同步 多线程同步 模型 完全 案例 知识点
生产者-消费者模型
是多线程同步的经典案例。
此模型中生产者向缓冲区 push 数据,消
费者从缓冲区中 pull 数据。
这个 Demo 中缓冲区用 python 实现的 Queue 来做, 这个模块是线程安全的使开发者不
用再为队列增加额外的互斥锁.
信号处理的实现是这样的:
1)主线程接到一个 SIGTERM 的信号后先通知 Consumer 停止向缓冲区 push 数据并退
出
2)Produer 将缓冲区中的数据消费完全后在退出
3)主线程退出
生产者消费者模型的优点:
1、解耦
假设生产者和消费者分别是两个类。 如果让生产者直接调用消费者的某个方法, 那么生产
者对于消费者就会产生依赖(也就是耦合)。将来如果消费者的代码发生变化, 可能会
影响到生产者。而如果两者都依赖于某个缓冲区,两者之间不直接依赖,耦合也就相应降
低了。
2、支持并发
由于生产者与消费者是两个独立的并发体, 他们之间是用缓冲区作为桥梁连接, 生产者只
需要往缓冲区里丢数据, 就可以继续生产下一个数据, 而消费者只需要从缓冲区了拿数据
即可,这样就不会因为彼此的处理速度而发生阻塞。
3、支持忙闲不均
如果制造数据的速度时快时慢,缓冲区的好处就体现出来了。当数据制造快的时候,消费
者来不及处理,未处理的数据可以暂时存在缓冲区中。 等生产者的制造速度慢下来,消
费者再慢慢处理掉。
标签:互斥锁 span 缓冲区 线程同步 多线程同步 模型 完全 案例 知识点
原文地址:http://www.cnblogs.com/yezefei/p/7280214.html