博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生产者消费者模型
阅读量:6269 次
发布时间:2019-06-22

本文共 934 字,大约阅读时间需要 3 分钟。

 

一.概念的引入

  日常生活中,每当我们缺少某些升高或用品时,我们都会去超市购买,在此过程中,顾客就是消费者,而商品制造商就是生产者,而中间的超市就是相当于缓冲区.

  在程序开发过程中,我们也会遇到这样的情况,就是有些模块会提供数据,有些模块会来处理这些数据,但是,处理数据的速度不够快,那么提供的数据就不能再短时间内处理掉,那么我们就要引入一个中间变量------缓冲区,来存放这些数据

  产生数据的模块-----生产者    处理数据的模块---- 消费者   生产者和消费者直接的中介----- 缓冲区

  三者之间的结构图:

举个栗子:

1.写信                             ------------------- 相当于生产者制造数据

2.将信件放入邮箱          --------------------相当于生产者将数据放入缓冲区

3.邮递员将信件从邮筒取出来 ------------ 消费者将数据从缓冲区取出来

4.邮递员把信件拿去邮局做处理 --------- 相当于消费者处理数据

 

二.为什么要使用生产者消费者模型

  归根结底来说,生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找到生产者要数据,而是直接从阻塞队列了里面取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力,这个阻塞队列就是用来给生产者和消费者解耦的.

 

三.生产者消费者模型的优点

  1.解耦 ------  降低生产者和消费者直接的依赖关系.

  2.支持并发  -------生产者和消费者可以是两个独立的并发主体,互不干扰的运行

  3.支持忙闲不均  ----如果制造数据的速度时快时慢,缓冲区可以对其进行适当缓冲.

 

四.生产者/消费者模型的记忆原则

三二一原则:  三种关系 ,二个角色 ,一个场所

三种关系: 1.生产者与生产者(互斥)     2.生产者与消费者(同步与互斥)     3.消费者和消费者(互斥)

两个角色: 1.生产者     2.消费者

一个场所: 1.缓冲区

 

转载于:https://www.cnblogs.com/kcwxx/p/9512843.html

你可能感兴趣的文章
C# 获取文件名及扩展名
查看>>
Web安全学习计划
查看>>
输出有序数组的连续序列范围
查看>>
zinnia项目功能分析
查看>>
windows cmd for paramiko
查看>>
SQL经典面试题集锦
查看>>
View学习(一)-DecorView,measureSpec与LayoutParams
查看>>
色彩力量!21款你应该知道的优秀品牌设计
查看>>
SDUT 3503 有两个正整数,求N!的K进制的位数
查看>>
【.Net】C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径...
查看>>
Redis常用命令速查 <第二篇>
查看>>
CSS规范
查看>>
使用FastDateFormat来代替JDK自带的DateFormat
查看>>
Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
查看>>
Android源代码解析之(三)--&gt;异步任务AsyncTask
查看>>
(zhuan) 自然语言处理中的Attention Model:是什么及为什么
查看>>
C#中使用RabbitMQ收发队列消息
查看>>
Hadoop1.2.1 全然分布式集群搭建实操笔记
查看>>
第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
查看>>
MVC总结--MVC简单介绍以及和WebForm差别
查看>>