Linux进程间通信——SystemV消息队列与信号量

文章目录

    • 消息队列
    • 信号量
      • 同步
      • 互斥
      • 原语、原子性
      • 信号量
      • 多线程并发访问

消息队列

SystemV除了共享内存之外,还有一个进程间通信的方式,是消息队列

我们说一切进程间通信的方式本质其实就是让不同进程看到同一份资源

这个消息队列的本质其实就是让两个进程可以同时看到这个队列,但是管理者其实还是操作系统

进程将数据块使用接口发送给操作系统,操作系统处理好之后插入到队列中,另一个进程也可以这样进行操作,对队列进行插入操作

当操作取出的接口时,给第一个进程另一个进程的数据块,给第二个进程第一个进程的数据块

那么其实这个消息队列并非一个严谨的先进先出,他是有标志的先进先出,本质上相当于两个队列,而且也不规定单向通信

这里与之前不同的其实就是标志,就是数据块的类型

操作系统对消息队列也需要进行管理,因此也有一个描述的结构体

并且由于都是SystemV标准下的结构,接口也都差不多,这里我们不过多介绍,等之后我们会对这里进行模拟实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

信号量

同步

这里是操作系统相关的内容,只做简单介绍,具体还是需要去读课本

我们说进程之间是具有异步性的,说白了就是我们无法确定哪个进程先执行,哪个进程后执行

这样就会造成一些问题

例如内存共享,两个进程通信时

写进程在还没写完的时候,读进程就读

甚至一个进程写、很多个进程读,这样就会造成数据不完整的问题

因此我们有必要让读进程等待,等到写进程写完之后,读进程再读

例如共享内存传递大块数据,管道传递单个标志,当标志标记写完成,读才能进行读取

这个东西叫做同步,也就是为了解决异步问题的一个东西

互斥

互斥在我们生活中也有遇到过,例如手机摄像头,当你打微信视频的时候,就没办法用相机拍照,当一个人用打印机的时候,另一个人就没办法控制

这本质上是对有限资源的保护问题,确保在一个时间段内,只能有一个人访问资源

这种资源称之为临界资源,那么共享内存其实就不算临界资源,除非我们也做保护,访问临界资源的代码也称为临界区

原语、原子性

这两个本质上是一个东西,用来描述一段代码无法被中断,就像原子一样不可再分

信号量

既然临界资源是有限的,我们怎么去描述呢

就是用信号量,信号量的本质其实就是计数器,用于描述临界资源数量的多少

进程可以用信号量对资源进行预定

但是信号量本身加减是不允许被中断的,因此操作系统专门封装了原语

也就是PV操作,申请资源就是P操作、释放资源就是V操作

多线程并发访问

因为临界资源是有限的,操作系统就不会一次性给你全部的资源

而是依次给进程一部分

有一个下载器工具就是利用了这个原理

百度网盘每次可能只用一个线程去申请网速资源,用于下载

但是这个下载器可以截获下载的链接,自己开很多线程并发访问下载,于是下载速度就快了

信号量的本质其实就是一个计数器,用来表示资源的数量

但是当资源本身只有一个时,计数器也就只有01两种状态,是一个二元信号量

那么这个东西就称之为锁

利用这个锁我们就可以做到同步和互斥

因为资源是有限的,当进程无法获取资源时就会处于阻塞队列中

当我们想让A进程先运行到某个节点之后,B进程才能运行

我们就可以让A进程先使用P操作将资源占据,B进程再使用P操作的时候,发现资源没有了,只能阻塞,直到A进程执行了V操作释放资源,B进程才得以继续运行

这里只是一个最最基础且不一定对的描述

对于进程的同步与互斥问题,经典的同步互斥模型之后会介绍或实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十二步:像玩游戏一样搞量化,量化交易不是“黑神话”

十二步:像玩游戏一样搞量化,量化交易不是“黑神话” 1、定义您的目标2、数据收集和清理3、构思4、模型开发5、回测6、风险管理7、交易成本分析 (TCA)8、模拟交易9、优化10、执行11、监控和维护12、记录和审查结论 《黑神话:悟空》今日上线了&…

OSPF-基础多区域实验

1.ENSP下载 阿里云盘分享 ⭐/*无需密钥 免费下载 安装不成功,可关注并私信博主*/ 2.OSPF的基础需求和规则 实验规则: 1.接口地址→XY.XY.XY.R /24 X:两者之间最小的 Y:两者之间最大的 R:谁的接口就是谁的编号 以R1和R2之间的连接为例&#xff0…

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(中)

目录 一.Nginx版本和安装方式:源码编译安装 1.验证版本及编译参数 2.使用安装完成的二进制文件nginx 3.Nginx 启动文件 二.平滑升级和回滚 三.全局配置 实现 nginx 的高并发配置 四.核心配置:新建一个 PC web 站点 五.核心配置:location的详细使用…

GlobalMapper-大疆的航点kmz转航线文件展示空间轨迹

0序: 在大疆遥控器或者司空2中设置航线,都是一个个的航点,如果把航点转为航线,在三维地球中显示其空间效果。用于分析和实际物体的距离,或者展示该航线都做了哪些方面的考虑。 如何把一堆点连城一条线? 本…

Kali Linux 命令大全

一、引言 Kali Linux 作为一款专为渗透测试和安全研究设计的操作系统,拥有丰富的命令行工具,熟练掌握这些命令对于高效地进行安全测试和分析至关重要。本文将为您详细介绍 Kali Linux 中常用的命令,涵盖系统信息获取、文件操作、网络分析、用…

如何轻松有效地将 Windows 10 电脑迁移到 SSD

您想将 Windows 10 迁移到新硬盘驱动器吗?在专业第三方应用程序的帮助下,它可以简单有效地完成。这篇文章将为读者提供有关如何将 Windows 10 迁移到 SSD 的详细指南。 Windows 10 电脑系统迁移到 SSD 的四个原因 Windows 10 克隆到 SSD 意味着将设备上…

【C++】————智能指针

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年8月20日 一,什么是智能指针 在C中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针&…

标准版v5.4安卓手机小程序扫码核销读取不到核销码的问题

修改这个文件,红色的那块代码替换成绿色的这段代码,然后重新打包上传。 文件地址:template/uni-app/pages/admin/order_cancellation/index.vue let path decodeURIComponent(res.path); self.verify_code path.split(‘code’)[1]; h5…

使用Element UI组件时,icon图标不显示

问题描述: 我在使用Element UI组件的日期选择器时,发现图标不显示(左边是原图,右边的问题图)。 经过检查我发现,我的JS,CSS文件都没有问题,只是缺少了element-icons.tff和element-icons.woff这两个文件。 …

C语言之“ 数组 ”

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C语言基础 目录 前言 一、数组 二、一维数组 2.1 一维数组的创建和初始化 数组创建 数组初始化 数组类型 2.2 一维数组的使用 数组下标 数组打印 数组输…

SIRA-PCR: Sim-to-Real Adaptation for 3D Point Cloud Registration 论文解读

目录 一、导言 二、 相关工作 1、三维点云配准工作 2、无监督域适应 三、SIRA-PCR 1、FlyingShape数据集 2、Sim-to-real自适应方法 3、配准 4、损失函数 一、导言 该论文来自于ICCV2023,论文提出了一种新的方法SIRA-PCR,通过利用合成数据Flying…

Java面试--框架--Spring MVC

Spring MVC 目录 Spring MVC1.spring mvc简介2.spring mvc实现原理2.1核心组件2.2工作流程 3.RESTful 风格4.Cookie,Session4.1 会话4.2 保存会话的两种技术 5.拦截器5.1过滤器、监听器、拦截器的对比5.2 过滤器的实现5.3 拦截器基本概念5.4 拦截器的实现 1.spring …

Ropdump:针对二进制可执行文件的安全检测工具

关于Ropdump Ropdump是一款针对二进制可执行文件的安全检测工具,该工具基于纯Python开发,是一个命令行工具,旨在帮助广大研究人员检测和分析二进制可执行文件中潜在的ROP小工具、缓冲区溢出漏洞和内存泄漏等安全问题。 功能介绍 1、识别二进…

使用gpreftools测试性能

参考文献: C 性能分析工具调研_性能分析工具 gperf perf vergi 比较-CSDN博客性能测试工具CPU profiler(gperftools)的使用心得-CSDN博客gperftools使用方法和常见问题_pprof no nodes to print-CSDN博客c 分析 gperftools 总结 | Weakyon Blog 文章目录 安装使用 …

第2章-01-网站中的资源介绍

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲。 🎉欢迎 👍点赞✍评论⭐收…

微信小程序--30(网络数据请求)

1.小程序中网络数据请求的限制 只能请求HTTPS类型的接口必须将接口的域名添加到信任列表中 2.配置request合法域名 需求描述 希望请求某个域名下的接口 步骤 登录小程序管理后台→开发→开发设置→服务器域名→修改request合法域名 练习 注意事项 域…

【Linux】yum、vim、gcc/g++的使用

目录 一、Linux 软件包管理器 yum 什么是软件包 关于 rzsz 查看软件包★ 如何安装软件★ 如何卸载软件★ Linux 开发工具 二、Linux编译器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 vim操作总结 如果在vim界面不小心按了Ctrl …

Unity的粒子系统

目录 基础参数与模块 创建与编辑 功能与应用 实例与教程 结论 Unity粒子系统的最新功能和更新有哪些? 如何在Unity中使用Visual Effect Graph创建复杂粒子效果? Unity粒子系统的高级应用技巧有哪些? 在Unity中实现粒子系统时的性能优…

【计算机组成原理】二、数据的表示和运算:1.数值与编码(十进制二进制转换、BCD码、ASCII码、汉字编码、奇偶校验码、循环冗余检测CRC、海明码)

二、数据的表示和运算 文章目录 二、数据的表示和运算1.数值与编码1.1数据存储和排列❗1.2十进制转换1.2.1整数1.2.2小数 1.3二进制转换1.3.1 B->O1.3.2 B->H 1.4真值&机器数1.5 BCD码1.6 ASCII码1.7汉字与GBK1.8 UTF1.9检错码1.9.1奇偶校验码1.9.2循环冗余检测CRC1.…

CentOS7设置默认免密登录用户root

CentOS7设置默认免密登录用户root 步骤1、打开要更改的 CentOS 系统2、切换到root用户2、reboot重启系统 步骤 1、打开要更改的 CentOS 系统 2、切换到root用户 2、reboot重启系统