当前位置:网站首页>进程通信的方式
进程通信的方式
2022-08-03 13:58:00 【123_YQH】
进程通信
1.进程通信的概念
进程是一个独立的资源分配单元,不同进程(主要是指不同的用户进程)之间的资源是独立的,没有关联的,不能在一个进程中直接访问另一个进程的资源。但是,进程不是孤立的,如我和你用qq聊天、或迅雷下载资源都需要不同的资源进行通信。这就需要不同进程之间进行信息的交互和状态的传递等,因此这就需要进程间的通信。
进程通信主要有以下几种目的:
- 数据传输:一个进程需要将它的数据发送给另一个进程
- 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了牟总事件(如子进程需要终止时要通知父进程)
- 资源共享:多个进程之间共享同样的资源。为了做到这一点,需要内核提供互斥和同步机制。
- 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程所有陷入和异常,并能够及时直到它的状态改变。
2.进程间通信方式
同一主机进程间通信方式主要有:匿名管道、有名管道、信号、消息队列、共享内存、内存映射、信号量。
不同主机之间进程通信方式主要有:Socket。
2.1管道通信(匿名管道pipe、有名管道fifo)
管道的特点:
- 管道其实是一个在内核内存中维护的缓存,这个缓冲器的存储能力是有限的。
- 管道可以看作是一个文件:读操作、写操作,匿名管道没有文件实体,有名管道有文件实体,但不存储数据。可以按照操作文件的方式对管道进行操作。
- 一个管道是一个字节流,使用管道时不存在消息或者消息边界的概念,从管道读取数据的进程可以读取任意大小的数据块,而不管写入进程写入管道的数据块的大小是多少。
- 管道是半双工的(比如进程A和B之间通信,只能A向B传输数据或者B向A传输数据,而不能同时传输)。
- 匿名管道只能在具有公共祖先的进程(父子进程或兄弟进程)之前使用。而有名管道(FIFO)可以在任意两个进程之间使用。
- 管道中的读数据操作是一次性的,一旦被读走,就从管道中抛弃。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RYd0qIUE-1659346554493)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1659338210747.png)]](/img/55/b51bfd676850a9d023822610f90189.png)
①匿名管道通信示意图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gdAIsz8N-1659346554494)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1659340120452.png)]](/img/b5/9f373c82912335f183224fe1697534.png)
②有名管道通信示意图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0DYPlCVo-1659346554494)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1659341359340.png)]](/img/09/c7086fe9e4a9728eeece92b13b2ee7.png)
2.2内存映射(mmap操作)
内存映射是将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件。
①内存映射示意图
②用内存映射来实现通信示意图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ekBg7mqr-1659346554495)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1659342217048.png)]](/img/4e/19734aa0cae15cdd053c5605ef0bd5.png)
2.3共享内存(类似于shared_ptr)
共享内存允许两个或多个共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会被称为一个进程用户空间中的一部分,因此这种IPC机制无需内核接入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。
与管道等要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用用户空间的缓冲区相比,这种IPC技术的速度更快。无需内核介入,通信速度最快。
共享内存和内存映射的区别
1.共享内存可以直接创建,内存映射需要磁盘文件(匿名映射除外)
2.共享内存效率更高
3.内存
所有的进程操作的是同一个共享内存。(类似于类中的static成员变量)。
内存映射,每个进程在自己的虚拟地址中有一块独立的内存
4.数据安全问题
-进程突然退出
共享内存还存在
内存映射去小时
-运行进程的电脑死机
数据存在共享内存中,没有了
内存映射区的数据,由于磁盘文件中的数据还在,所以内存映射区的数据还存在
5.生命周期
-内存映射区:进程退出,内存映射区销毁
-共享内存:进程退出,共享内存还在,标记删除(所有的关联进程数为0),或者关机如果一个进程退出,会自动和共享内存取消关联(类似于shared_ptr)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHirb8Tl-1659346554495)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1659345084665.png)]](/img/1a/86019ce40e74511076a9b13379c6a4.png)
2.4信号
信号是Linux进程间通信最古老的方式之一,是在事件发生时对进程的通知机制,有时也称为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中中断,转而处理某一个突发事件。
①信号的两个主要目的:
- 让进程知道已经发生了一个特定的事
- 强迫进程执行它自己代码中的信号处理程序
②信号的特点:
- 简单
- 不能携带大量信息
- 满足某个特定条件才发送
- 优先级比较高
③重要的信号:
![- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fv7ox4R5-1659346554495)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1659345967190.png)]](/img/53/3b33533fa5ab9a9b3f2a409e1087d9.png)
Qt中的信号与槽就是根据信号来实现。
边栏推荐
- 国产替代风潮下,电子元器件B2B商城系统如何助力企业突围市场竞争
- The embassy in Iceland reminds Chinese citizens in Iceland to strengthen safety protection
- ideaIU-2020.1下载
- Golang arrays and slices
- Top 10 free proxy IP software_Domestic static IP proxy software
- W11或W10系统如何进行休眠?
- 为什么手动启动GBase 8c数据库中GTM节点
- 位级运算之计算整数位级表示奇偶性
- chrome浏览器对应驱动_chrome手机浏览器
- 《深度学习》-学习笔记-1-机器学习基础
猜你喜欢

CVPR 2022 | 从人体网格预测骨架,是真正的生理学骨架!

厨卫电器行业数字化集采管理系统:优化产业供应结构,实现采购业务流程集中管控
![[web penetration] detailed explanation of CSRF vulnerability](/img/be/5d6dda8294ab263a14ed03fcd61226.png)
[web penetration] detailed explanation of CSRF vulnerability
![[A summary of the sorting and use of activation functions in deep learning]](/img/c2/abec82f4f1e8ce3c70b6d98b24e7eb.png)
[A summary of the sorting and use of activation functions in deep learning]

哥斯拉加密WebShell过杀软

552个元宇宙App,70个搞社交,哪款真能交到朋友?

UE4 C disk cache solution

【web渗透】CSRF漏洞详细讲解

游戏版号“地下交易”,一个版号能卖上千万?

PMP每日一练 | 考试不迷路-8.3(包含敏捷+多选)
随机推荐
TiFlash 计算层概览
第二讲 软件生命周期
QImageReader
冷链行业商业供应链系统:实现全流程数字化协同,激活企业迸发市场活力
HCIP Day 16 Notes (SVI, Spanning Tree Protocol)
系统学习Shell之正则表达式
How to use matlab to implement the piecewise function "recommended collection"
VLAN experiment
冰蝎加密 WebShell 过杀软
APT组织最喜欢的工具 Cobalt Strike (CS) 实战
游戏版号“地下交易”,一个版号能卖上千万?
哥斯拉加密WebShell过杀软
致一位湖南女孩
使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片
UE4 解决C盘缓存问题
函数在结构体中的应用练习
为什么手动启动GBase 8c数据库中GTM节点
Nanoprobes FluoroNanogold 偶联物的特色和应用
使用百度EasyDL实现施工人员安全装备检测
VMware 虚拟机如何连接网络「建议收藏」