经典软件设计模型 - 生产者消费者模型

2023-05-16

简介

这里就不具体介绍了,网上一堆关于生产者消费者模式的介绍,这是一个常用的设计方法,只要牵扯多个线程之间协作一般就需要这个设计方法,简单意思就是有个缓冲负责两个线程之间的交流,一个线程往缓冲区写数据,一个线程从缓冲区读数据。


缓冲区类型

队列缓冲区:缓冲区一般是一个list,每次要写的数据都是新建一块内存,然后将这个内存指针压入队列,读缓冲区就是从队列尾读取,处理完后,将内存释放;这个方法显然存在大量的内存分配和释放,会造成大量CPU开销;

环形缓冲区:一般如果每次处理的数据大小固定,或者虽然大小不固定,但是肯定不会超过某个大小,就可以先分配一定数量的内存块,由于数量有限,所以当数据写到最后一块内存后,再重新回到第一块内存写入,这些内存就像首尾相连一样,类似一个环;

双缓冲区:感觉是环形缓冲区如果是两个缓冲区就是双缓冲区;


生产者和消费者协作

这里就是一个同步问题,环形缓冲区一般使用信号量同步,队列缓冲区可以使用信号量,也可以使用互斥锁,这个看具体应用;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典软件设计模型 - 生产者消费者模型 的相关文章

随机推荐

  • 【计算机网络 24】TCP/IP数据包结构详解

    一 前言 一般来说 xff0c 网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作 xff0c 但是一些特殊的情况下 xff0c 就需要深入的理解 网络数据包的结构 xff0c 以及协议分析 如 xff1a 网络监控 xff
  • 读《Java编程思想第五版》心得体会

    x1f345 Java学习路线 xff1a 搬砖工逆袭Java架构师 x1f345 简介 xff1a Java领域优质创作者 x1f3c6 CSDN哪吒公众号作者 Java架构师奋斗者 x1f4aa x1f345 扫描主页左侧二维码 xff
  • 操作系统基础知识详解

    作者简介 哪吒 CSDN2022博客之星Top1 CSDN2021博客之星Top2 多届新星计划导师 博客专家 专注Java硬核干货分享 立志做到Java赛道全网Top N 本文收录于 Java基础教程系列 目前已经700 订阅 CSDN最
  • 【SUSE Linux kernel版本升级】SUSE Linux Enterprise Server 12 SP5

    安装完SUSE Linux操作系统后 xff0c 正常会将SUSE Linux的kernel升级至最新版本 本次实验环境是SUSE Linux Enterprise Server 12 SP5 xff1a cat etc release S
  • 一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬

    消息队列 为什么写这篇文章 博主有两位朋友分别是小A和小B 小A xff0c 工作于传统软件行业 某社保局的软件外包公司 xff0c 每天工作内容就是和产品聊聊需求 xff0c 改改业务逻辑 再不然就是和运营聊聊天 xff0c 写几个SQL
  • iOS开发之NSMutableParagraphStyle富文本

    在iOS开发中 xff0c 常常会有一段文字显示不同的颜色和字体 xff0c 或者给某几个文字加删除线或下划线行间距的需求 就需要富文本来实现 一 实例化方法和使用方法 NSMutableAttributedString detailStr
  • Ubuntu一直卡死的问题(18.04)

    昨天今天Ubuntu突然出现了一个问题 xff0c 就是每次开机不到5分钟 xff0c 随便点击一下浏览器或者其他的地方就会卡住 xff0c 但是鼠标可以移动 xff0c 就是无法点击 xff0c 而且等待一段时间后会出现黑屏然后提示如下图
  • 作为一个普通的程序员,到底应不应该转型AI工程师?

    动不动就是50万的毕业生年薪 xff0c 动不动就是100万起步价的海归AI高级人才 xff0c 普通员到底应不应该转型AI工程师 xff0c 普通程序员到底应该如何转型AI工程师 xff1f 下面就分享几个特别典型的普通程序员成功转型AI
  • 编译原理第二章习题

    一 填空题 假设G是一个文法 xff0c S是文法的开始符号 xff0c 如果S 61 gt x xff0c 则称x是 句型 文法G产生的 句子 的全体是该文法描述的语言 文法 G S S AB A aA B bBc bc描述的语言 L G
  • 推荐几个免费好用的搜书网站

    小不点搜索 地址 xff1a https www xiaoso net 介绍 xff1a 一个公益的网站不收费 我用来搜索过图书 xff0c 其他资源还没搜索过 xff0c 用起来速度挺快的 2 java1234 地址 http www j
  • 推荐一些好用的APP

    南瓜影视 链接 xff1a https ng33 app channelCode 61 share88 appkey 61 ayo1id amp recommend 61 5708550 没有广告 xff0c 有电视版 xff0c 手机版
  • 虚拟机的初始化设置的磁盘空间太大,进行缩小

    xff08 如果你的磁盘文件是多文件的直接跳到第二步 xff09 1 将但磁盘文件分解为多磁盘文件 在虚拟机安装目录下 xff0c 执行该命令 vmware vdiskmanager exe r 你的虚拟机磁盘文件 vmdk t 1 spa
  • yum包查找网站

    https pkgs org http rpm pbone net index php3
  • swagger3 +srpingsecurity

    引入jar包 参考swagger官网http springfox github io springfox docs current quick start guides span class token operator lt span s
  • java移除数组中的某个元素

    span class token keyword package span com span class token punctuation span example span class token punctuation span de
  • CentOS7下使用YUM安装MySQL5.6

    xff08 1 xff09 检查系统中是否已安装 MySQL rpm qa grep mysql 返回空值的话 xff0c 就说明没有安装 MySQL 注意 xff1a 在新版本的CentOS7中 xff0c 默认的数据库已更新为了Mari
  • Linux性能优化

    Linux性能优化 来源 xff1a https www ctq6 cn linux E6 80 A7 E8 83 BD E4 BC 98 E5 8C 96 性能优化 性能指标 高并发和响应快对应着性能优化的两个核心指标 xff1a 吞吐和
  • 导入sql文件报错:Row size too large (>8126)

    报错异常 xff1a 1118 Row size too large gt 8126 Changing some columns to TEXT or BLOB or using ROW FORMAT 61 DYNAMIC or ROW F
  • Jlink工具下的RTT调试应用

    单片机开发过程中 xff0c 除了debug调试之外 xff0c 很多人都是通过打印信息进行调试 xff0c 一般都会分配出来一个调试的串口 xff0c 如果你的单片机使用jlink烧录器 xff0c 那么可以使用调试工具 RTT来代替串口
  • 经典软件设计模型 - 生产者消费者模型

    简介 这里就不具体介绍了 xff0c 网上一堆关于生产者消费者模式的介绍 xff0c 这是一个常用的设计方法 xff0c 只要牵扯多个线程之间协作一般就需要这个设计方法 xff0c 简单意思就是有个缓冲负责两个线程之间的交流 xff0c 一