生产者消费者模式

前言

属于面向过程编程模式的一种。产生数据-生产者,处理数据-消费者,中间还有一个缓冲区,作为一个中介,生产者把数据放入缓冲区,而消费者从缓冲区取出数据。

关键就是内存缓冲区为空的时候消费者必须等待,而内存缓冲区满的时候,生产者必须等待,从而达到动态平衡,

缓冲区的优点

  • 降低耦合度,生产者和消费者都依赖缓冲区,而不直接依赖彼此
  • 支持并发,生产者和消费者是两个独立的并发主体,在工作的时候,谁也不用去等谁
  • 支持忙闲不均,当数据制造快的时候,消费者来不及处理,未处理的数据可以暂时存在缓冲区中。等生产者的制造速度慢下来,消费者再慢慢处理掉。

与发布者订阅者模式的区别

生产消费者模式

  • 生产者推送消息到消息中心,消费者取出消息消费,同一类别下,所有消费者取到的数据是相同的
  • 生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有

订阅发布模式

  • 本质是一种生产者消费者模式,不同点:订阅者先向消息中心订阅自己感兴趣的类型数据,发布者推送消息到消费中心,订阅者最后获取到自己感兴趣的数据(更细粒度的控制)
  • 发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息应该都是一样的