Linux 10:生产者消费者问题
文章目录
- 1. 生产者消费者
- 1.1 生产者消费者问题概述
- 1.2 生产者消费者问题优点
- 1.3 生产者消费者问题图解
1. 生产者消费者
1.1 生产者消费者问题概述
生产者/消费者问题,也被称作有限缓冲问题。可以描述为:两个或者更多的线程共享同一个缓冲区,其中一个或多个线程作为“生产者"会不断地向缓冲区中添加数据,另一个或者多个线程作为"消费者"从缓冲区中取走数据。生产者/消费者模型关注的是以下几点:
- 生产者和消费者必须互斥的使用缓冲区
- 缓冲区空时,消费者不能读取数据
- 缓冲区满时,生产者不能添加数据
1.2 生产者消费者问题优点
1. 解耦:因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这样生产者和消费者的代码发生变化,都不会对对方产生影响。这样其实就是把生产者和消费者之间的强耦合解开,变成了生产者和缓冲区,消费者和缓冲区之间的弱耦合
2. 支持并发:如果消费者直接从生产者拿数据,则消费者需要等待生产者生产数据,同样生产者需要等待消费者消费数据。而有了生产者/消费者模型,生产者和消费者可以是两个独立的并发主体。生产者把制造出来的数据添加到缓冲区,就可以再去生产下一个数据了。而消费者也是一样的,从缓冲区中读取数据,不需要等待生产者。这样,生产者和消费者就可以并发的执行。
3. 支持忙闲不均:如果消费者直接从生产者这里拿数据,而生产者生产数据很慢,消费者消费数据很快,或者生产者生产数据很多,消费者消费数据很慢。都会造成占用CPU的时间片白白浪费。生产者/消费者模型中,生产者只需要将生产的数据添加到缓冲区,缓冲区满了就不生产了。消费者从缓冲区中读取数据,缓冲区空了就不消费了,使得生产者/消费者的处理能力达到一个动态的平衡。
1.3 生产者消费者问题图解
图解
Linux 10:生产者消费者问题相关推荐
- windows下如何进行linux编程,生产者-消费者问题编程简单实现--windows和linux下
又是某课程的实验(感觉好烦啊啊...),这次终于不用编译内核了,但是但是,他让我们写多线程.好吧,那就写写写,但是等等..他要我们实现生产者-消费者同步问题,要用信号量解决同步问题..这几个都是什么鬼 ...
- Linux下生产者消费者问题的C语言实现
注:查看全文请关注作者,或点击前往:生产者-消费者问题的C语言实现 实验六 生产者-消费者问题实现 实验题目 要求 在Linux操作系统下用C实现经典同步问题:生产者-消费者,具体要求如下: (1) ...
- 【Linux】生产者消费者编程实现-线程池+信号量
生产者消费者编程实现,采用了线程池以及信号量技术. 线程的概念就不多说,首先说一下多线程的好处:多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞 ...
- [Linux]生产者消费者模型(基于BlockQueue的生产者消费者模型 | 基于环形队列的生产者消费者模型 | 信号量 )
文章目录 生产者消费者模型 函数调用角度理解生产者消费者模型 生活角度理解生产者消费者模型 为什么要使用生产者消费者模型 生产者消费者模型优点 321原则 基于BlockingQueue的生产者消费者 ...
- Linux多线程——生产者消费者模型
目录 一.生产者消费者模型 1.1 什么是生成者消费者模型 1.2 生产者消费者模型的优点 1.3 基于阻塞队列实现生产者消费者模型 1.4 POSIX信号量 1.4.1 信号量概念 1.4.2 P操 ...
- 【Linux】生产者消费者模型
文章目录 一. 什么是生产者消费者模型 1. 基本概念 2. 三种关系 3. 再次理解生产者消费者模型 二. 生产者消费者模型的优点 三. 基于BlockingQueue的生产者消费者模型 1. 准备 ...
- 【Linux】生产者消费者模型-基于环形队列实现
1.环形缓冲区的优势 在上篇博客基于阻塞队列的生产者消费者模型中我介绍了什么是生产者消费者模型以及生产者-消费者模式,还没了解的可以戳链接查看. 基于阻塞队列的实现,虽然简单,但是对内存分配性能要求较 ...
- Linux实现生产者消费者模型
生产者消费者模型 简单来说就是"321原则(并非某一规则,而是为了理解生产者消费者模型)" "3"代表的是三种关系 生产者与消费者的互斥与同步关系 生产者与生产 ...
- java多线程系类:基础篇:10生产者消费者的问题
概要 本章,会对"生产/消费者问题"进行讨论.涉及到的内容包括: 1. 生产/消费者模型 2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/sk ...
- Linux 信号量 生产者消费者小例题
菜鸟偶遇信号量,擦出火花(只有不熟才会有火花).于是上网搜资料和看<Unix环境高级编程>实现了几个小例题,高手请勿喷!这几位写得非常好啊: 题目来源: http://www.it165. ...
最新文章
- Windows server 2016 添加盘符为D盘的数据盘
- 翻译 | 2015年的最佳Material Design集锦 【上篇】
- 《可爱的Python》读书笔记(五)
- 瑞德西韦有效吗?专家一句大实话解释清楚了
- 敏捷开发“松结对编程”实践之二:计划与设计篇(大型研发团队,学习型团队,139团队,师徒制度,设计评审,预想陈述,共同估算,扑克牌估算)...
- PLSQL Developer简单使用及常用快捷键
- Git工程区域与文件状态
- 如何学习工业机器人技术
- 【java期末复习题】第15章 JDBC数据库编程
- 2020-09-22回忆一下高中物理的弹性碰撞速度公式推导
- CSM300调试心得
- 修改自走棋服务器,多多自走棋:各种服务器区分,玩家关心问题集锦,先锋服更新!...
- ionic android 证书,Ionic 5/Angular Android和iOS 指纹认证
- 博途V15.1激活工具出错。
- 网站怎么屏蔽指定搜索引擎访蜘蛛的访问
- 20130822-STM8L101F3P6的PD0使用异常,尚未解决~!
- 【Lua学习笔记】lua安装及Sublime编辑器配置
- SETP7 Basic V11 SP2
- UI设计都有哪些设计原则,分享三个给你
- BZOJ 1477: 青蛙的约会