5.3 进程间通信管道和共享内存

每次打开一个网页都是一个进程

进行管道之间通信的方式:以前学到的有可以在磁盘上开辟空间进行交互,也可以在内存中开辟缓冲区进行交互。

一定注意可读性

管道就是属于在内存中的一片缓冲区,管道可以在命令行中创建管道mkfifo也可以在vim中用代码,删除unlink也是这样

管道的本质是一致的,有两个分支可以分为匿名管道仅用于父子进程之间的通信(int num[2]),命名管道需要创建文件进行通信用完后需要删除。

这个地方需要好好理解,先打开匿名管道pipe再fork就会出现像这样的情况,但是一定记得管道是半双工的,因此说不能同时写同时读所以说一般都是关闭一端。

popen和pclose是就是默认连接标准输入和输出

popen就是有点类似system,就是打开一个可执行程序,同时将标准输入或者是标准输出管道将两者进行连接。

管道往往用于少量的数据的传输。管道出现的问题当需要交互的进程比较多的时候,管道的使用次数就比较多,同时从内存拷贝到内核中然后从内核态再拷贝到内存中,比较耗费性能。

因此说这个地方就可以用共享内存来实现,这样的话,两个进程都是读写在一个地方。

问题点可能是在于究竟是都还是写("r","fread"),这个地方是相对于管道而言!!!

一般各个进程之间都是在逻辑有自己的一片虚拟内存,往往各个进程的物理部分也存在不同的位置不能直接进行交互,可以借助于共享内存的方式进行交互,在物理上共享一片内存。

共享内存由主要由两个指令:system V 和POSIX 接口

信息在网络上进行传输必须要具有自我描述性,要不然传过去不知道到底传过去的是什么东西,所以说必须要借助于键值对内容标记。共享内存的键值对也是这样的道理。

在linux中的实现是首先先造一个key(ftok)然后再为这个key分配相应的空间(shmget),然后再将相应的内存与程序空间连接。之后的操作有断开连接(shmdt)以及多功能函数释放共享内存空间修改内存空间权限(shmctl)。

ftok("1.txt", )通过某一个文件产生一个key,究竟是哪一个文件不重要,还有另外一个参数,也是帮助建立不同的键,所以说只要有一个不一样的就会是一个不一样的共享内存区域

共享内存空间的分配一般都是分配一页4096,shmget后面的附加的命令是比较复杂的,可以查看。

框架:

进程间通信可以采用在磁盘上共享,也可以在内存中共享也就是管道。

管道可以分为有名管道和匿名管道,有名管道需要创建文件,匿名管道只能用于父子进程之间。

但是进程的交互比较多的时候,在内存与内核之间来回拷贝耗费的性能比较多

-----》因此说用共享内存

共享内存的开辟三步走,起个名-----造空间------将共享空间与程序连接

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

(优作)基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)竞赛作品

基于STM32蓝牙控制小车系统设计(硬件源代码论文)竞赛作品 基于意法半导体与ARM公司生产的STM32F4 DISCOVERY开发板的集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块。电机驱动模块使用了两个L298N芯片来驱动4路电…

基于SSM SpringBoot vue教务排课系统

基于SSM SpringBoot vue教务排课系统 系统功能 登录 个人中心 学生信息管理 教师信息管理 课室信息管理 班级信息管理 系别信息管理 专业信息管理 课程信息管理 选课信息管理 课表信息管理 开发环境和技术 开发语言:Java 使用框架: SSM(Spring SpringMVC Myba…

【Qt基础教程】QGridLayout与QFormLayout

文章目录 前言一、QGridLayout二、QFormLayout总结 前言 在Qt应用程序开发中,布局管理器是一种关键的技术,用于管理和安排窗口小部件的位置和大小。QGridLayout和QFormLayout是两个常用的布局管理器,它们分别适用于网格状和表单状的界面布局…

创新指南 | 围绕“获客、转化、增长”三要素,构建 PLG线上运营 体系

构建一个高效的 PLG线上运营 体系,对于任何希望利用产品本身优势推动业务增长的公司来说都是至关重要的。PLG模式通过产品本身的力量来驱动用户增长、促进转化并提升用户体验,从而实现自然而持续的增长。 一、PLG线上运营的整体框架和思路 PLG线上运营 …

百度网盘里的文件怎么打印?

在日常生活和工作中,我们经常需要打印各种文件,包括学习资料、工作报告、合同文件等。有时候,这些文件保存在百度网盘等云存储服务中,我们该如何方便地打印出来呢?今天,就为大家介绍一种便捷的方法——通过…

InfiniFlow 創始人兼CEO張穎峰確認出席“邊緣智能2024 - AI開發者峰會”

隨著AI技術的迅猛發展,全球正逐步進入邊緣計算智能化與分布式AI深度融合的新時代,共同書寫著分布式智能創新應用的壯麗篇章。邊緣智能,作為融合邊緣計算和智能技術的新興領域,正逐漸成為推動AI發展的關鍵力量。借助分布式和去中心…

[数据结构]———归并排序

具体代码:在gitee仓库:登录 - Gitee.com 目录 ​编辑 1.基本思想: 2. 代码解析 1.分析 2.逻辑图 3.运行结果 1.基本思想: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分…

7个策略,让你的可视化大屏打动人心!

要打动人心的可视化大屏,可以采取以下策略: 引人入目的设计: 选择鲜明而吸引人的颜色和视觉效果,使用引人注目的动画和过渡效果,以及吸引眼球的图形和图案设计。通过精心设计的布局和排版,确保信息清晰可…

leetcode_43.字符串相乘

43. 字符串相乘 题目描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 &q…

Static内存分析

title: Static内存分析 tags: Java基础知识 abbrlink: 49066 date: 2021-04-25 19:06:41 Static内存分析 一.基础须知 1.静态变量 1)定义: 在一个Java类中,可以使用static关键字来修饰全员变量,该变量被称作静态变量 2&…

【linux】重定向

重定向 什么是重定向如何实现一个简单的重定向关于重定向的系统调用接口 注意:在看这篇博客之前,最好是要对文件在系统中是如何被打开的以及操作系统是如何管理文件有一个初步了解,如果不了解的话,可以看看这篇博客《初步认识文件…

苹果CEO对未来一代人工智能投资持乐观态度

尽管在动荡的第二季度,苹果的收入和iPhone销量有所下降,但其新兴的人工智能技术可能会带来急需的提振。 在5月2日的电话财报会议上,苹果公布季度收入为908亿美元,比去年下降4%。iPhone的收入也下降了10%,至460亿美元。…

无言:破局之道:顿悟+坚持——早读(逆天打工人爬取热门微信文章解读)

致无言 引言Python 代码第一篇 洞见 7年跟踪调查北京28个精英家庭:为什么顶尖大学孩子大多来自有钱家庭?第二篇 人民日报 来了!新闻早班车要闻社会政策 结尾 控制你的情绪 否则它将控制你 在紧张的游戏中 控制情绪 避免冲动行为 是每个玩家的…

Linux中动态库的用法及优缺点?怎样制作动态库和静态库?

一、什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C、java、Pascal等语言。gcc支持多种硬件平台. 在 Linux…

地震学角度说明横波纵波哪个才是垂直于传播方向振动

上面两幅图片,第一个是横波,第二个是纵波。死记硬背过一段时间总会忘记哪个是哪个。现通过地震学对横波纵波的定义来说明,如何从图形一眼判断横波和纵波。 横波: 因为地震的发生是由于地球内部的板块运动造成的,所以…

数据分析必备:一步步教你如何用numpy改变数据处理(2)

1、NumPy 简单入门教程 NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组。它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在原生Python中永远无法体验到的速度。 NumPy绝对是…

【软件开发规范篇】JAVA后端开发异常处理规范

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

01 Activiti 7:步骤

01 Activiti 7:步骤 1. 整合Activiti2. 业务流程建模3. 部署业务流程4. 启动流程实例5. 查询待办任务6. 处理待办任务7. 结束流程 1. 整合Activiti 业务系统使用 Activiti 来对系统的业务流程进行自动化管理。为了方便业务系统访问(操作)Act…

C语言 循环语句 (3) for 循环语句

接下来 我们来看第三个 for语句 基本语句是 for关键字 然后小括号 括号中三个表达式 然后它对表达式2进行判断 如果表达式2条件成立 则走进循环体 执行完循环体 会回来执行表达式3 然后再返回来 继续对表达式2进行判断 如果表达式2 还是成立 这继续循环往复 直到表达式2的条件…

《Fundamentals of Power Electronics》——隔离型CUK转换器、

以下是隔离型CUK转换器的相关知识点: Cuk电路的隔离型版本获得方式不同。基础非隔离型Cuk电路如下图所示。 将上图中电容C1分成两个串联的电容C1a和C1b,得到结果如下图所示。 在两个电容之间插入一个变压器,得到如下图所示电路。 变压器极性…