当前位置:网站首页>IPC机制
IPC机制
2022-06-24 20:55:00 【黄元宝】
前言
IPC - 进程间通信,常用于多进程编程中用以共享数据, 系统学习,概念性的东西,过往的操作中经常使用 socket进行IPC,但是其他也要做些了解,本篇简单总结
通信方式
1. 管道
1.1 匿名管道
场景
cat xx.txt|grep a
敲过linux命令的都能看懂这个命令,这就是一种匿名管道的使用,匿名管道只能在通过 fork 的方式创建的进程下面进行通信,所以信息流是单向的
原理
内核空间无格式的字节流数据,
依赖文件系统,进程结束自动销毁
单向通信,上下游进程默认同步
fork的进程会继承父进程打开的fd所以,适用于父子进程或者亲缘关系进程
总结
匿名管道,它的通信范围只能是存在父子/亲缘关系的进程
1.2 命名管道FIFO
场景
双向信息流
原理
内核空间无格式的字节流数据
设备文件
事先创建管道文件,使用 mkfifo fifo 创建命名管道
总结
可用于任意进程间通信
不管匿名管道还是命名管道,在实际场景中都较少使用,但是一些特定场景可能使用他比其他方式来的效率更高,比如本机大文件的传输
2. 消息队列
原理
内核空间消息链表
消息体由用户自定义格式,每个消息体固定大小存储
问题
内核态用户态切换和数据拷贝
必须显示释放,否则不会随着进程结束而释放掉内存,除非操作系统重启
总结
3. 共享内存
原理
虚拟内存映射相同的物理地址,避免内核态用户态切换和数据拷贝
问题
并发问题,非并发安全的,当多个进程向同一个共享内存中写入数据时可能产生覆盖,如何解决?加锁呗,即信号量机制
4. 信号量
场景
用于进程间互斥和同步
原理
内核直接管理,是一个整数型计数器,实现进程间的互斥和同步,非用于缓存进程间的通信数据,有两类:二值信号量, 计数信号量, 二值信号量即1/0 用来实现互斥/同步, 计数信号量用作程序计数用
两种原子操作
- P操作
信号量 -1,相减后若信号量<0,则表明资源已被占用,进程需阻塞等待;相减后若信号量>=0,则表明还有资源可使用,进程可正常继续执行。 - V操作
信号量 +1,相加后若信号量<=0,则表明当前有阻塞中的进程,于是会将该进程唤醒运行;相加后若信号量>0,则表明当前没有阻塞中的进程。
- P操作
实例
互斥信号量: 信号量初始值为1, 此机制保证内存在任何时刻只有一个进程访问。可以看到互斥需两个因素, ①信号量=1 ②同一个进程执行PV操作
同步信号量:信号量初始值为0, 此机制除了保证互斥外,亦可保证同步顺序
上图展示了两个进程,其中进程1在进程2之前执行可以看到同步需两个因素, ①信号量=0 ②PV操作不在同一进程
上面两图提到了
临界区对应的有一个临界资源,怎么理解?
临界资源: 同一时刻,只允许一个进程或线程访问的资源
临界区:访问临界资源的代码段,这段代码中进程/线程将访问共享资源,当另外一个进程/线程已经在这段代码中运行时.这个进程/线程就不能在这段代码中执行,控制对临界资源的访问就是控制程序进入临界区来完成的
5. 信号
异步通信, 一个数字, 信号是进程间通信机制中唯一的异步通信机制
- 场景
kill -9 xx:SIGKILL信号,立即结束进程ctrl+c: SIGINT信号,强制中断程序的执行,杀死程序的进程ctrl+z: SIGTSTP信号,中断任务,挂起进程, fg重新执行,bg直接杀掉, vim一个文件可以测试下
6. Socket
跨网络和不同主机需要使用socket进行通信了,以上的5种全部是同台主机的机制
一般这类的是通过TCP/UDP协议
边栏推荐
- How about compass stock trading software? Is it safe?
- 戴尔为何一直拒绝将商用本的超薄推向极致?
- 腾讯云WeCity丨产业联合 协同创新 共贺新春!
- 重磅:国产IDE发布,由阿里研发,完全开源!(高性能+高定制性)
- Scala sample class case calculate
- Heavyweight: the domestic ide was released, developed by Alibaba, and is completely open source! (high performance + high customization)
- Deep learning LSTM model for stock analysis and prediction
- Powerbi - for you who are learning
- 【直播回顾】2022腾讯云未来社区城市运营方招募会暨SaaS 2.0新品发布会!
- 腾讯搬家了!
猜你喜欢
随机推荐
欢迎来到联想智能大屏的新世界
Welcome to the new world of Lenovo smart screen
【直播回顾】2022腾讯云未来社区城市运营方招募会暨SaaS 2.0新品发布会!
[untitled]
Scala trait inheritance class
LLVM TargetPassConfig
Danish Technical University pioneered the application of quantum computing to power flow modeling of energy system
Cobalt strike installation tutorial
“一个优秀程序员可抵五个普通程序员!”
这个国庆!腾讯云WeCity陪您一同出行,点亮城市地标...
新一代可级联的以太网远程I/O数据采集模块
归并排序模板 & 理解
中金财富证券开户佣金多少呢?股票开户交易安全靠谱吗?
Yasea APK Download Image
联想童夫尧:11倍于大势,我们一路攻城拔寨
Convert MySQL query timestamp to date format
卷积与反卷积关系超详细说明及推导(反卷积又称转置卷积、分数步长卷积)
新手看过来,带你一次性了解“软考”
AUTOCAD——两种延伸方式
Abnova丨CSV 磁珠中英文说明








