进程间的通信
管道
匿名管道
匿名管道的⽣命周期,是随进程的创建⽽建⽴,随进程的结束⽽销毁
匿名管道的创建,需要通过下⾯这个系统调⽤:
int pipe(int fd[2])
这⾥表示创建⼀个匿名管道,并返回了两个描述符,⼀个是管道的读取端描述符 fd[0] ,另⼀个是管道的写⼊端描述符 fd[1] 。注意,这个匿名管道是特殊的⽂件,只存在于内存,不存于⽂件系统中。
所谓的管道,就是内核⾥⾯的⼀串缓存。从管道的⼀段写⼊的数据,实际上是缓存在内核中的,另
⼀端读取,也就是从内核中读取这段数据。另外,管道传输的数据是⽆格式的流且⼤⼩受限。
匿名管道的两个文件描述符都在一个进程,怎么进行进程间通信?
可以使⽤ fork 创建⼦进程, 创建的⼦进程会复制⽗进程的⽂件描述符,这样就做到了两个进程各有两个「 fd[0] 与 fd[1] 」,两个进程就可以通过各⾃的 fd 写⼊和读取同⼀个管道⽂件实现跨进程通信了。
问题:两端都能写入和读出,易造成混乱,
解决:建立两个管道单向传输
对于匿名管道,它的通信范围是存在⽗⼦关系的进程。因为管道没有实体,也就是没有管
道⽂件,只能通过 fork 来复制⽗进程 fd ⽂件描述符,来达到通信的⽬的。
对于命名管道,它可以在不相关的进程间也能相互通信。因为命令管道,提前创建了⼀个类型为管
道的设备⽂件,在进程⾥只要使⽤这个设备⽂件,就可以相互通信。
消息队列
消息队列⽣命周期随内核,如果没有释放消息队列或者没有关闭操作系统
消息队列的通信模式就可以解决。⽐如, A 进程要给 B 进程发送消息, A 进程把数据放在
对应的消息队列后就可以正常返回了, B 进程需要的时候再去读取数据就可以了。同理, B 进程要给 A 进程发送消息也是如此
消息队列是保存在内核中的消息链表,在发送数据时,会分成⼀个⼀个独⽴的数据单元,也就是消
息体(数据块),消息体是⽤户⾃定义的数据类型,消息的发送⽅和接收⽅要约定好消息体的数据类型,所以每个消息体都是固定⼤⼩的存储块,不像管道是⽆格式的字节流数据。如果进程从消息队列中读取了消息体,内核就会把这个消息体删除。
不足之处:
- ⼀是通信不及时,
- ⼆是附件也有⼤⼩限制
- 存在⽤户态与内核态之间的数据拷⻉开销
因为进程写⼊数据到内核中的消息队列时,会发⽣从⽤户态拷⻉数据到内核态的过程,同理另⼀进程读取内核中的消息数据时,会发⽣从内核态拷⻉数据到⽤户态的过程
共享内存
消息队列的读取和写⼊的过程,都会有发⽣⽤户态与内核态之间的消息拷⻉过程。
共享内存的⽅式,就很好的解决了这⼀问题。
共享内存的机制,就是拿出⼀块虚拟地址空间来,映射到相同的物理内存中。
信号量
为了防⽌多进程竞争共享资源,⽽造成的数据错乱,所以需要保护机制,使得共享的资源,在任意时刻只能被⼀个进程访问。正好, 信号量就实现了这⼀保护机制。
信号量其实是⼀个整型的计数器,主要⽤于实现进程间的互斥与同步,⽽不是⽤于缓存进程间通信的数据。
信号量表示资源的数量,控制信号量的⽅式有两种原⼦操作:
- ⼀个是 P 操作,这个操作会把信号量减去 1,相减后如果信号量 < 0,则表明资源已被占⽤,进程需阻塞等待;相减后如果信号量 >= 0,则表明还有资源可使⽤,进程可正常继续执⾏。
- 另⼀个是 V 操作,这个操作会把信号量加上 1,相加后如果信号量 <= 0,则表明当前有阻塞中的进程,于是会将该进程唤醒运⾏;相加后如果信号量 > 0,则表明当前没有阻塞中的进程;
P 操作是⽤在进⼊共享资源之前, V 操作是⽤在离开共享资源之后,这两个操作是必须成对出现的。
信号
信号是进程间通信机制中唯⼀的异步通信机制,因为可以在任何时候发送信号给某⼀进程,⼀旦有信号产⽣,我们就有下⾯这⼏种,⽤户进程对信号的处理⽅式。
- 执⾏默认操作。 Linux 对每种信号都规定了默认操作,例如,上⾯列表中的 SIGTERM 信号,就是终⽌进程的意思。
- 捕捉信号。我们可以为信号定义⼀个信号处理函数。当信号发⽣时,我们就执⾏相应的信号处理函数。
- 忽略信号。当我们不希望处理某些信号的时候,就可以忽略该信号,不做任何处理。有两个信号是应⽤进程⽆法捕捉和忽略的,即 SIGKILL 和 SEGSTOP ,它们⽤于在任何时候中断或结束某⼀进程。
Socket
跨网络通信
前⾯提到的管道、消息队列、共享内存、信号量和信号都是在同⼀台主机上进⾏进程间通信,那要想跨⽹络与不同主机上的进程之间通信,就需要 Socket 通信了。
根据创建 socket 类型的不同,通信的⽅式也就不同:
- 实现 TCP 字节流通信: socket 类型是 AF_INET 和 SOCK_STREAM;
- 实现 UDP 数据报通信: socket 类型是 AF_INET 和 SOCK_DGRAM;
- 实现本地进程间通信: 「本地字节流 socket 」类型是 AF_LOCAL 和 SOCK_STREAM,「本地数据报 socket 」类型是 AF_LOCAL 和 SOCK_DGRAM。另外, AF_UNIX 和 AF_LOCAL 是等价的,所以AF_UNIX 也属于本地 socket;
相关文章:
进程间的通信
管道 匿名管道 匿名管道的⽣命周期,是随进程的创建⽽建⽴,随进程的结束⽽销毁 匿名管道的创建,需要通过下⾯这个系统调⽤: int pipe(int fd[2]) 这⾥表示创建⼀个匿名管道,并返回了两个描述符,⼀个是…...
hadoop/hive/DBeaver启动流程
hadoop 启动 cd到指定目录下 cd /opt/module/hadoop-3.3.0/sbin/启动文件 ./start-all.shjps一下,查看显示的内容 应该显示以下内容 NameNode SecondaryNameNode DataNode ResourceManager NodeManager如果缺少namenode,那么执行 rm -rf /tmp/hadoo…...
1节18650锂电池的容量是多大,电流,电压是多大
1节标准的18650锂电池的规格通常如下: 容量: 18650锂电池的容量通常在1800mAh(毫安时)到3000mAh之间,这取决于电池的化学成分和制造商的设计。例如,许多常见的18650电池标称容量为2200mAh或2600mAh。 电流…...
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真。仿真输出GDOP优化结果,遗传算法的优化收敛曲线以及三维空间坐标点。 2.测试软件版本以及运行…...
Linux C语言:多级指针(void指针和const)
一、多级指针 把一个指向指针变量的指针变量,称为多级指针变量对于指向处理数据的指针变量称为一级指针变量指向一级指针变量的指针变量称为二级指针变量 1、二级指针变量的说明形式 <数据类型> ** <指针名> ; 一张图理解二级指针 2、多…...
MicroPython+ESP32 C3开发上云
传感器PinI/O状态D412输出1开0关D513输出1开0关 概述 MicroPython是python3编程语言的精简实现,能够在资源非常有限的硬件上运行,如MCU微控制器Micropython的网络功能和计算功能很强大,有非常多的库可以使用,它为嵌入式开发带来了…...
动态 SQL
动态 SQL 是 MyBatis 的强大特性之一,能够完成不同条件下不同的 sql 拼接。也就是说执行的 SQL 语句并不是固定的,而是不同人的不同操作执行的语句会有所差异。MyBatis 通过使用 标签 的方式来实现这种灵活性的。 <if>标签 例如在有一些网站进行…...
功能强大的多功能文档转换工具Neevia Document Converter Pro 7.5.0.241
Neevia Document Converter Pro是一款功能强大的Windows软件,旨在将文档转换为各种格式,包括PDF、TIFF、JPEG和许多其他格式。该程序专为在企业环境中使用而设计,提供文档转换和处理过程的自动化,这使其成为处理大量文档的组织的***工具。 Neevia Document Converter Pro的…...
从零到一,深入浅出大语言模型的奇妙世界
2022 年底,OpenAI 发布的 ChatGPT 模型在全球范围内引起了巨大轰动。本文详细的介绍了大语言模型的发展历程、构建过程和大语言模型如何使用等知识,帮助大家搞懂大语言模型。 一、大语言模型发展历程 大模型技术并不是一蹴而就的,大语言模型…...
ESP8266发送WOL幻数据包实现电脑远程唤醒
计算机远程唤醒(Wake-on-LAN, WOL) 计算机远程唤醒(Wake-on-LAN,简称 WOL)是一种局域网唤醒技术,可以将局域网内处于关机或休眠状态的计算机唤醒至引导(Boot Loader)或运行状态。无…...
用一个ESP32S3-Zero把有线键盘变为无线
三脚猫最近一直琢磨,那些喜欢买剪线键盘,以及自制键盘瞎折腾的人都是怎么搞的。经过不懈努力,终于想明白除了直接的硬件一个个pin针的高低电压判断后转给蓝牙,拿到现成的古董剪线键盘还有一个方式其实是在usb host转发给蓝牙类似这…...
Redis 7.x 系列【3】多种连接方式
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. Redis Cli3. 可视化管理工具3.1 Redis Insight3.2 RedisDesktopManager 4. …...
数据结构(DS)C语言版:学习笔记(4):线性表
参考教材:数据结构C语言版(严蔚敏,吴伟民编著) 工具:XMind、幕布、公式编译器 正在备考,结合自身空闲时间,不定时更新,会在里面加入一些真题帮助理解数据结构 目录 2.1线性…...
Linux 命令大全
Linux 命令大全 Linux是一个强大的操作系统,它通过命令行界面提供了丰富的功能和灵活性。了解和掌握各种Linux命令对于系统管理员和开发者来说至关重要。本文将为您提供一个全面的Linux命令大全,帮助您更好地理解和使用Linux系统。 基础命令 ls - 列出目录内容。cd - 更改当…...
[华为北向网管NCE开发教程(6)消息订阅
1.作用 之前介绍的都是我们向网管NCE发起请求获取数据,消息订阅则反过来,是网管NCE系统给我们推送信息。其原理和MQ,JMS这些差不多,这里不过多累述。 2.场景 所支持订阅的场景有如下,以告警通知为例,当我…...
2024.6.15 英语六级 经验与复盘
文章目录 英语六级 经验与复盘2024年上半年六级考试(2024 6.8 - 6.15)前情提要:经验:作文:(30min)听力:(25min)SectionC(精细阅读) (30min)SectionB(段落匹配) (15min)SectionA(选词填空) (5min / 舍弃)翻译(20min&…...
计算机专业的未来展望
身份角度一:一名曾经的计算机专业学生 作为一名曾经的计算机专业学生,我认为计算机相关专业仍然是一个值得考虑的选择。随着科技的飞速发展,计算机行业的需求只会越来越高,因此,无论是在就业前景还是个人发展方面&a…...
Shell变量的高级用法
在Shell编程中,变量的使用是至关重要的。初学者可能只使用最基本的变量赋值和调用,但Shell变量实际上有很多高级用法,可以极大地提升脚本的灵活性和效率。本文将介绍几种Shell变量的高级用法,帮助您更好地利用Shell脚本。 1. 参数…...
【Python/Pytorch - 网络模型】-- SVD算法
文章目录 文章目录 00 写在前面01 基于Pytorch版本的SVD算代码02 理论知识 00 写在前面 (1)矩阵的奇异值分解在最优化问题、特征值问题、最小二乘方问题、广义逆矩阵问题及统计学等方面都有重要应用; (2)应用&#…...
全光万兆时代来临:信而泰如何推动F5G-A(50PONFTTR)技术发展
技术背景 F5G-A(Fifth Generation Fixed Network-Advanced,第五代固定网络接入)是固定网络技术的一次重大升级,代表了光纤网络技术的最新发展。F5G-A旨在提供更高的带宽、更低的延迟、更可靠的连接以及更广泛的应用场景。 F5G-A六…...
港科夜闻 | 香港科大与香港科大(广州)合推红鸟跨校园学习计划,共享教学资源,促进港穗学生交流学习...
关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与香港科大(广州)合推“红鸟跨校园学习计划”,共享教学资源,促进港穗学生交流学习。香港科大与香港科大(广州)6月14日共同宣布推出“红鸟跨校园学习计划”,以进一步加强两校学…...
基于Wireshark实现对FTP的抓包分析
基于Wireshark实现对FTP的抓包分析 前言一、虚拟机Win10环境配置二、FileZilla客户端的安装配置下载FileZilla客户端安装FileZilla 三、FileZilla Server安装下载FileZilla Server安装 四、实现对FTP的抓包前置工作实现抓包完成抓包 前言 推荐一个网站给想要了解或者学习人工智…...
Vue54-浏览器的本地存储webStorage
一、本地存储localStorage的作用 二、本地存储的代码实现 2-1、存储数据 注意: localStorage是window上的函数,所以,可以把window.localStorage直接写成localStorage(直接调用!) 默认调了p.toString()方…...
Linux下Shell脚本基础知识
主要参考视频: 这可能是B站讲的最好的Linux Shell脚本教程,3h打通Linux-shell全套教程,从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档: Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…...
爬虫初学篇——看完这些还怕自己入门不了?
初次学习爬虫,知识笔记小分享 学scrapy框架可看:孤寒者博主的【Python爬虫必备—>Scrapy框架快速入门篇——上】 目录🌟 一、🍉基础知识二、🍉http协议:三、🍉解析网页(1) xpath的用…...
[数据集][目标检测]减速区域检测数据集VOC+YOLO格式1654张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1654 标注数量(xml文件个数):1654 标注数量(txt文件个数):1654 标注…...
OpenGL3.3_C++_Windows(8)
材质&&漫反射,光照贴图 使用struct为材质建立结构体,以便方便管理漫反射贴图是物体的颜色值(纹理)(通过 UV 坐标映射到渲染物体的表面),材质是物体的属性(物体对光的交互&a…...
GPU的工作原理
location: Beijing 1. why is GPU CPU的存储单元和计算单元的互通过慢直接促进了GPU的发展 先介绍一个概念:FLOPS(Floating Point Operations Per Second,浮点运算每秒)是一个衡量其执行浮点运算的能力,可以作为计算…...
Linux常⽤服务器构建-samba
目录 1. 介绍 2. 安装 3. 配置 3.1 创建存放共享⽂件的路径 3.2 创建samba账户 4 重启samba 5. 访问共享⽂件 5.1 mac下访问⽅式 5.2 windows下访问⽅式 1. 介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的⼀个免费软件,能够完成在 windows 、 mac 操作系统…...
【Java】已解决java.lang.UnsupportedOperationException异常
文章目录 问题背景可能出错的原因错误代码示例正确代码示例注意事项 已解决java.lang.UnsupportedOperationException异常 在Java编程中,java.lang.UnsupportedOperationException是一个运行时异常,通常表示尝试执行一个不支持的操作。这种异常经常发生…...
建一网站要多少钱/百度收录时间
1.图形化界面启动 右击“计算机”,在快捷菜单中选择“管理”命令,如图所示,打开“计算机管理”对话框。也可以执行“开始”|“控制面板”|“管理工具”|“服务”来启动服务。 改成手动模式,每次电脑开机都需要点击启动服务 2. 命令行启动…...
长沙网站seo技巧/免费网站制作软件平台
假设检验: p值:得到零假设中极端情况的概率。当p值很小时,认为零假设不成立。 单侧检验和双侧检验: z统计量:(由z分数根据统计量推导而来);(当n>30时)服从正态分布 t统计量&a…...
网站建设客服接听术语/靠谱的广告联盟
ARKit 是 iOS 11 的主打功能之一,开发者可以利用 ARKit 轻松的为 iPhone和 iPad 打造增强现实应用。iOS 11 发布到现在已经6个月了,根据 app 数据公司 SensorTower 的统计,App Store 中集成了 ARKit 功能的应用下载数量超过 1300 万。这些应…...
网站制作熊猫建站/大数据分析
PMP考试的重点越来越偏向对于PMBOK的理解运用上,所以PMBOK需要反复读,至少三遍。 第一遍很粗略的看,把所有内容都遍览,让自己对于整本书有个大体的理解。 第二遍需要精读,阅读的过程中做好便签和色笔记录,阅…...
wordpress会员发布文章/上海公司排名
设置定时任务很简单,用Timer类就搞定了。一、延时执行首先,我们定义一个类,给它取个名字叫TimeTask,我们的定时任务,就在这个类的main函数里执行。代码如下:package test;import java.util.Timer;public cl…...
国内做免费视频网站/广州各区最新动态
ORACLE SQL语句分类 SQL语句可以被看作是一种简单、强大的计算机语言或指令。sql语句被分为以下6类:数据定义类、数据操作类、事务控制类、会话控制、系统控制、嵌入式SQL语句。 数据操作语言语句[Data manipulation language,DML] 从一个或多个表或视图…...