IPC之七:使用 System V 共享内存段进行进程间通信的实例

IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍共享内存(Shared Memory),因为没有像管道、消息队列这样的中介介入,所以通常认为共享内存是迄今为止最快的 IPC 方式;Linux 既支持 UNIX SYSTEM V 的共享内存,也支持 POSIX 的共享内存,本文针对 System V 共享内存段,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文的实例中涉及多进程编程和信号处理等,阅读本文还需要一些基本的内存管理知识,本文对 Linux 编程的初学者有一些难度。

1 System V 共享内存基本概念

  • 共享内存实际上是一个内存区域(段)的映射,一个进程创建一个共享内存段,然后被其它进程映射到自身的地址空间上,从而实现共享,各个进程实际读取的是同一个内存区域;

  • 之所以说共享内存是迄今为止速度最快的 IPC 方式,是因为多个进程不管是使用 FIFO 还是消息队列传递数据,都需要经过内核的中转,而共享内存则不需要;

  • 考虑如下过程:进程 A 从文件中读出数据,并将数据传递给进程 B,进程 B 再将文件内容写入到另一个文件;

  • 当使用 FIFO 或者消息队列传递数据时,过程如下:

    • 进程 A 首先要将文件内容读出并存储到自身地址空间的内存中;
    • 进程 A 将数据发送到 FIFO 或者消息队列实际上是将自身地址空间的数据拷

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

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

相关文章

微信小程序自定义组件---behaviors

1.什么是behaviors behaviors是小程序中,用于实现组件间代码共享的特性,类似于vue中的mixins 2.behaviors的工作方式 每个behavior可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中。每个组…

数字孪生项目的开发平台

WEBGL 开发数字孪生项目的流程涵盖了需求分析、场景搭建、模型创建、数据接入、动画与交互、性能优化、测试与部署以及维护与升级等方面。WEBGL 开发数字孪生项目的流程可以分为以下几个步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外…

UniGui使用CSS移动端按钮标题垂直

unigui移动端中按钮拉窄以后,标题无法垂直居中,是因为标题有一个padding属性,在四周撑开一段距离。会变成这样: 解决方法,用css修改padding,具体做法如下 首先给button的cls创建一个cls,例如 然后添加css&…

SSE Server-Send Events适用于什么场景,有什么弊端存在

Server-Sent Events (SSE) 是一种用于在客户端和服务器之间实现单向实时通信的 Web 技术。它主要适用于需要从服务器向客户端推送实时信息的场景,例如新闻更新、股票价格变动、社交媒体通知等。 SSE 的优点: 实时性: SSE 提供了从服务器到客…

网络协议 - HTTP 协议详解

网络协议 - HTTP 协议详解 一 、基础概念URL请求和响应报文1. 请求报文2. 响应报文 二、HTTP 方法GETHEADPOSTPUTPATCHDELETEOPTIONSCONNECTTRACE 三、HTTP 状态码1XX 信息2XX 成功3XX 重定向4XX 客户端错误5XX 服务器错误 四、HTTP 首部通用首部字段请求首部字段响应首部字段实…

Maven环境搭建及配置

Maven环境搭建及配置 1.下载部署 官方网站下载正式版的Maven文件,打开bin目录,复制路径然后去环境变量中的path下配置环境变量, 如果只有一个用户只需要在上面path配置复制的路径,当然也可以直接在下面配置,下面配置默认给所有用户都配置 设置完成打开控…

Tc0.Springboot项目启动失败

问题:IDEA调试Springboot项目启动失败:已与地址为 ‘‘127.0.0.1:12574’,传输: ‘套接字’’ 的目标虚拟机断开连接 一、现象描述 IDE(IDEA或者Eclipse)调试模式 博主使用的是IDEA 2023社区版:已与地址…

C#生成微信支付的Authorization签名认证

//获取签名var Token BuildAuthAsync("GET", body, URL);/// <summary>/// 构造签名串/// </summary>/// <param name"method">HTTP请求方式&#xff08;全大写&#xff09;</param>/// <param name"body">API接口…

【Unity】简单实现生成式电子围栏

【Unity】简单实现生成式电子围栏 三维电子围栏是一种通过使用三维技术和电子设备来建立虚拟围栏&#xff0c;用于监控和控制特定区域的系统。它可以通过使用传感器和摄像头来检测任何越界行为&#xff0c;并及时发出警报。这种技术可以应用于安防领域以及其他需要对特定区域进…

nodejs获取的微信小程序二进制图片无法展示

我们使用微信官方提供的接口getwxacode获取了微信小程序二维码&#xff0c;但是&#xff0c;获取的二进制图片无论如何都没法展示出来。 调用微信官方接口的方法为&#xff1a;使用Nodejs包request&#xff0c;调用方法为; // 获取小程序二维码 async queryQRCode(access_tok…

Leetcode—2413.最小偶倍数【简单】

2023每日刷题&#xff08;六十&#xff09; Leetcode—2413.最小偶倍数 class Solution { public:int smallestEvenMultiple(int n) {return (n % 2 1) * n;} };运行结果 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记得一键三连哦&#xff0c;点赞关注收藏…

Mistral AI 为什么这么火

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【构建工具】vite2没捂热,vite5又来了,性能大幅提升!

vite2还没焐热&#xff0c;vite5又来了&#xff01;&#xff01;&#xff01; 就在一周前vite5重磅发布了&#xff01;性能大幅提升! 请看下面&#xff1a;下面是翻译过来的&#xff0c;原文&#xff1a;Vite 5.0 发布&#xff01; |维特 (vitejs.dev) Vite 4 大约在一年前发布…

项目中使用临时文件夹或获取文件资源路径

关于项目中使用临时文件夹的情况 1. 如果想要获取resource目录下的某个文件夹路径&#xff1a; ResourceUtils.getURL("classpath:").getPath() "/xxx" 注意&#xff1a; 1.1 不能直接使用ResourceUtils.getURL("classpath:xxx&quo…

算法训练day37|贪心算法part06

738.单调递增的数字 遇到了strNum[i - 1] > strNum[i]&#xff0c;让strNum[i - 1]--&#xff0c;然后strNum[i]及以后给为9 根据这种情况从后往前遍历 class Solution {public int monotoneIncreasingDigits(int n) {String s String.valueOf(n);char[] chars s.toCha…

【全方位对比】前端vue2、vue3、vue3语法糖三种写法

Vue 前言1、点击切换页面数据实例对比1.1、vue21.2、vue31.3、vue3 setup语法糖 2、ref 和 reactive2.1、vue22.2、vue32.3、vue3 setup语法糖 3、生命周期4、使用mounted做对比4.1、vue24.2、vue34.3、vue3 setup语法糖 5、watch和computed5.1、vue25.2、vue35.3、vue3 setup语…

MODBUS协议

一、概念 modbus是一个公开免费的协议&#xff0c;广泛应用于工业控制领域&#xff08;PLC和仪器&#xff0c;PLC和PLC&#xff0c;PLC和上位机&#xff0c;PLC和触摸屏等等&#xff0c;其中PLC是可控制逻辑单元&#xff09; 他有两种物理接口&#xff08;硬件协议&#xff09;…

uniapp 蓝牙小程序-兼容安卓和iOS

withTimeout方法可以在搜寻设备时等待指定的秒数&#xff0c;如果30秒内未搜索到则取消搜索 /*** 超时控制函数* param {Promise} promise 回调函数* param {number} timeout 超时时间, 默认10s*/ export function withTimeout(promise, timeout 10000) {let timeoutEvent …

vba里字符串操作函数小结

目录 left,right,mid,LensplitvaljoininstrInStrRevReplacemid删除空格字符串与ASCIIleft,right,mid,Len left(字符串,截取长度) 返回从字符串左边算起指定截取长度的字符。 right(字符串,截取长度) 返回从字符串右边算起指定截取长度的字符。 mid(字符串,截取起始位置,截…

基于Netty连接池泄露问题了解客户端启动源码

连接池导致内存泄漏案例演示 简介 我们生产环境常常会用Netty客户端作为连接工具&#xff0c;尽管Netty强大且方便&#xff0c;但是使用不当的话也可能造成严重的生成事故。笔者本文就以一个连接池使用不当导致内存泄漏的案例来展开探讨。 问题复现 服务端代码 我们先贴出…