案例
学校食堂,厨房做饭菜(相当于生产者),做好后把饭菜放到窗口大餐盘中(相当于内存缓冲区),学生取饭菜(相当于消费者)
- 如果不分生产者、消费者,学生自己做饭,做饭后再吃,效率低下
- 有生产者消费者后,如果没有缓冲区,厨房做好饭菜没地方放,当学生数量过多,取饭菜有供应不上
生产者消费者模式
在实际开发过程中,经常会碰到如下场景:某个模块负责 产生数据,由另一个模块来负责 处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为 生产者;而处理数据的模块,就称为 消费者。
生产者消费者模式不是GOF提出的 23种设计模式 之一,23种设计模式都是建立在 面向对象 的基础之上的
面向过程 的编程中也有很多编程模式,生产者消费者模式 便是其中之一,它是我们编程过程中最常用的一种设计模式。
优点
解耦。生产者和消费者之间是独立的,而不是调用的关系
支持并发。生产者只关注 生产 数据,消费者只关注 处理 数据。n个厨师做饭菜,m个学生打饭菜,并发进行
支持忙闲不均。因为有了 缓冲区,生产者生成数据过多,消费者来不及处理数据,未处理的数据可以暂时存在缓冲区中
等等
实现
为了提高生产者、消费者的效率,一般使用 多线程 或 多进程 实现 生产者、消费者,缓冲区 用 队列(Queue) 实现

