进程间的通信方式

声明:以下内容为学习小林Coding图解网络的学习笔记,详情请关注小林Coding进行学习

管道:分为匿名管道和命名管道,前者只能进行父子进程之间的通信,后者可以进行两个不相关的进程通信。管道的通信是单向的,大小受限,通信效率低,不适合进程之间频繁的数据交换(可以理解为进程A往管道中写入数据,必须等到管道B取出了数据,进程A才能继续执行),它的优点是实现简单

消息队列:消息队列可以解决管道传输效率低的问题,A 进程要给 B 进程发送消息,A 进程把数据放在对应的消息队列后就可以正常返回了,B 进程需要的时候再去读取数据就可以了。

缺点:1.消息队列不适合⽐较⼤数据的传输,内核对消息体有大小的限制。
2.消息队列通信过程中,存在⽤户态与内核态之间的数据拷⻉开销,因为进程写⼊数据到内核中的消息队列时,会发⽣从⽤户态拷⻉数据到内核态的过程,同理另⼀进程读取内核中的消息数据时,会发⽣从内核态拷⻉数据到⽤户态的过程

共享内存:通过共享内存进行进程通信,数据不需要进行用户态和内核态之间的拷贝,它的机制就是拿出⼀块虚拟地址空间来,映射到相同的物理内存中,一个进程写入的东西,对其它进程是马上就能见到了,大大提高了进程之间的通信速度

缺点:如果多个进程同时修改共享资源,就会发生冲突,为了防止这种冲突,需要保护机制,所以引入了信号量

信号量: 对共享内存提供保护,在同一时刻,只能有一个进程可以修改共享变量

信号: 信号是进程间唯一的异步通信方式,可以在任意时刻向进程发送一个信号,进程可以捕捉或者忽略信号,当捕捉到信号后会执行默认操作(操作系统中每种信号都对应了一种操作)

Socket:用于实现不同主机之间的进程通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值