一.概念的引入
日常生活中,每当我们缺少某些升高或用品时,我们都会去超市购买,在此过程中,顾客就是消费者,而商品制造商就是生产者,而中间的超市就是相当于缓冲区.
在程序开发过程中,我们也会遇到这样的情况,就是有些模块会提供数据,有些模块会来处理这些数据,但是,处理数据的速度不够快,那么提供的数据就不能再短时间内处理掉,那么我们就要引入一个中间变量------缓冲区,来存放这些数据
产生数据的模块-----生产者 处理数据的模块---- 消费者 生产者和消费者直接的中介----- 缓冲区
三者之间的结构图:
举个栗子:
1.写信 ------------------- 相当于生产者制造数据
2.将信件放入邮箱 --------------------相当于生产者将数据放入缓冲区
3.邮递员将信件从邮筒取出来 ------------ 消费者将数据从缓冲区取出来
4.邮递员把信件拿去邮局做处理 --------- 相当于消费者处理数据
二.为什么要使用生产者消费者模型
归根结底来说,生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找到生产者要数据,而是直接从阻塞队列了里面取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力,这个阻塞队列就是用来给生产者和消费者解耦的.
三.生产者消费者模型的优点
1.解耦 ------ 降低生产者和消费者直接的依赖关系.
2.支持并发 -------生产者和消费者可以是两个独立的并发主体,互不干扰的运行
3.支持忙闲不均 ----如果制造数据的速度时快时慢,缓冲区可以对其进行适当缓冲.
四.生产者/消费者模型的记忆原则
三二一原则: 三种关系 ,二个角色 ,一个场所
三种关系: 1.生产者与生产者(互斥) 2.生产者与消费者(同步与互斥) 3.消费者和消费者(互斥)
两个角色: 1.生产者 2.消费者
一个场所: 1.缓冲区