admin 管理员组文章数量: 1086019
2024年3月13日发(作者:switch菜单语句编写)
架构设计:生产者/消费者模式
为了方便阅读,把本系列帖子的目录整理如下:
0、概述
1、如何确定数据单元
2、队列缓冲区
3、环形缓冲区
4、双缓冲区
[0]:概述
今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用
场。由于该模式很重要,打算分几个帖子来介绍。今天这个帖子先来扫盲一把。如果你对
这个模式已经比较了解,请跳过本扫盲帖,直接看下一个帖子(关于该模式的具体应用)。
看到这里,可能有同学心中犯嘀咕了:在四人帮(GOF)的23种模式里面似乎没听
说过这种嘛!其实GOF那经典的23种模式主要是基于OO的(从书名《Design Patterns:
Elements of Reusable Object-Oriented Software》就可以看出来)。而Pattern实际上
即可以是OO的Pattern,也可以是非OO的Pattern的。
★简介
言归正传!在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,
这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程
等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。
单单抽象出生产者和消费者,还够不上是生产者/消费者模式。该模式还需要有一个
缓冲区处于生产者和消费者之间,作为一个中介。生产者把数据放入缓冲区,而消费者从
缓冲区取出数据。大概的结构如下图。
为了不至于太抽象,我们举一个寄信的例子(虽说这年头寄信已经不时兴,但这个例
子还是比较贴切的)。假设你要寄一封平信,大致过程如下:
1、你把信写好——相当于生产者制造数据
2、你把信放入邮筒——相当于生产者把数据放入缓冲区
3、邮递员把信从邮筒取出——相当于消费者把数据取出缓冲区
4、邮递员把信拿去邮局做相应的处理——相当于消费者处理数据
★优点
可能有同学会问了:这个缓冲区有什么用捏?为什么不让生产者直接调用消费者的某
个函数,直接把数据传递过去?搞出这么一个缓冲区作甚?
版权声明:本文标题:架构设计:生产者消费者模式 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1710259870a564880.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论