生产者和消费者回顾

生产者与消费者模

1. 队列(1) 特点:先进先出

(2) python2 VS python3:

生产者和消费者回顾

(3)使用
      Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先  PriorityQueue。这些队列都实现了锁原语(可以理解为原子操作,即要么不做,要么就做完),能够在多线程中直接使用。可以使用队列来实现线程间的同
步。

a.常用操作

生产者和消费者回顾

b.规定队列长度

生产者和消费者回顾

c.队列优先级

生产者和消费者回顾

d.后入先出队列

生产者和消费者回顾

2. 生产者与消费者模式

定义:在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。

案例:厨师做包子和顾客吃包子问题。

生产者和消费者回顾

        这里,厨师相当于生产者,顾客相当于消费者,顾客吃包子,厨师做包子。做一个假设,如果厨师做包子的速度远远比顾客吃包子的速度要快,有这样一种情况,厨师等顾客吃完一个包子后再做下一个包子(这时我们说厨师与顾客的耦合度高,即厨师做包子与顾客吃包子是紧密相连的),这样显然效率会很低,现实情况中也不可能是这样,因为一旦顾客多时,厨师就有可能忙不过来了

        可以尝试这样解决:不管顾客有没有吃完包子,厨师也继续做包子,但此时是先把包子放在一个包子柜台中,等顾客有需要时再去包子柜台拿包子。如此一来,厨师和顾客的耦合度就变低了,即厨师做包子并不取决于顾客是否把包子吃完,这样的话效率显然就会高多。

1:简单的­­两个消费者对应一个生产者

生产者和消费者回顾

生产者和消费者回顾

2:复杂的­­多对多

生产者和消费者回顾

生产者和消费者回顾

运行结果:

生产者和消费者回顾

总结说明:
为什么要使用生产者和消费者模式
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当
中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理
完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必
须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。
什么是生产者消费者模式
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼
此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费
者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队
列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
基于队列实现生产者消费者模型