level 6
西安恩仪联教育
楼主

1、为什么要使用生产者-消费者模型在多线程开发中,如果生产者生产数据的速度很快,而消费者消费数据的速
度很慢,那么生产者就必须等待消费者消费完数据才能够继续生产数据,因为生
产过多的数据可能会导致存储不足,同理如果消费者的速度大于生产者那么消费
者就会经常处理等待状态,所以为了达到生产者和消费者生产数据和消费数据之
间的平衡,那么就需要一个缓冲区用来存储生产者生产的数据,所以就引入了生
产者-消费者模式。
简单来说,这里缓冲区的作用就是为了平衡生产者和消费者的数据处理能
力,一方面起到缓存作用。
2、生产者-消费者模型组成
这个模型由两类线程和一个缓冲区组成来组成
生产者线程: 生产数据,并把数据放在这个队列里面
缓冲区:存放生产者的数据的地方
消费者线程: 从队列里面取数据,消费数据
运行流程
生产者和消费者在同一时间段内共用同一个存储空间
生产者往存储空间中添加产品消费者从存储空间中取走产品
当存储空间为空时,消费者阻塞,
当存储空间满时,生产者阻塞
在多线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。
3、生产者-消费者模型运行过程
在多线程开发当中如果生产者处理速度很快,而消费者处理速度很慢,那么生产
者就必须等待消费者处理完,才能继续生产数据
如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解
决这个问题于是引入了生产者和消费者模式。
当缓冲区满的时候,生产者会进入休眠状态,当下次消费者开始消耗缓冲区
的数据时,生产者才会被唤醒,开始往缓冲区中添加数据,当缓冲区空的时候,
消费者也会进入休眠状态,直到生产者往缓冲区中添加数据时才会被唤醒。