【Linux】进程间通信

一.管道
1.匿名管道

只能用于具有亲缘关系的进程间通信

2.命名管道

可以用于同一主机上任意进程间通信

3.管道的读写特性

1)若管道中没有数据,则read阻塞,直到数据被写入
2)若管道中数据满了,则write阻塞,直到数据被读取
3)若管道的所有读端被关闭,则write会触发异常,进程退出
3)若管道的所有写端被关闭,则read不再阻塞,读完数据后返回0

4.命名管道的文件打开特性

1)若文件当前没有已经被以读的方式打开,则以O_WRONLY打开时会阻塞
2)若文件当前没有已经被以写的方式打开,则以O_RDONLY打开时会阻塞

5.管道特性

1)半双工通信
2)读写特性+命名管道的打开特性
3)生命周期随进程
4)自带同步与互斥
5)提供字节流服务

二.共享内存

最快的进程间通信方式,少了两步内核态与用户态之间的拷贝

原理

1)在物理内存中开辟出一块内存空间
2)将这块内存空间通过页表映射到虚拟地址空间中
3)进程可以通过虚拟地址空间访问到这块内存,进行操作
4)解除映射关系
5)删除共享内存

三.消息队列

操作系统在内核中为用户创建的一个队列,其他进程可以通过访问相同的队列进行通信
消息队列的生命周期随内核

四.信号量

用于实现进程间同步与互斥
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

本质是内核中的一个计数器,在对资源进行访问操作之前,先判断计数
1)计数<=0,则等待资源创建,计数-1,等待在等待队列上
2)计数>0,则直接返回,按照程序流程操作资源,计数+1
3)其他进程创建了资源,计数+1,并唤醒在等待队列上的进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值