进程间通信方式效率排序--个人理解

按照效率从高到低排序。
1、共享内存

依据:共享内存允许两个或多个进程直接访问同一块物理内存区域(具体做法,将两个进程的中的虚拟地址映射到同一块物理内存空间中,存在一些系统调用可以实现),数据的读写无需内核的额外复制操作,比如用户态到内核态的切换以及数据的来回拷贝,速度相对较快。但会存在多进程冲突问题,当多个进程同时访问修改一个共享变量。

例如:多个进程可以同时对共享内存中的大型数组进行操作,几乎没有数据传输的延迟。

2、信号

依据:信号是一种简单的异步通知机制,用于在进程间传递少量的信息,比如kill等相关命令。开销相对较小,但能传递的信息量有限。具体实现形式:每一个信号都会对应一个默认的事件,但大部分信号的默认事件都可以通过回调函数的形式进行修改。

例如:一个进程可以通过发送特定信号告知另一个进程某个事件的发生。

3、消息队列

依据:消息队列以消息的形式进行数据传递,内核会对消息进行一定的管理和存储,相较于共享内存和信号,存在一定的额外开销。消息队列的实现会在内核中维护一个消息链表,数据的写和读都存在用户态到内核态来回的数据拷贝,由于消息的结构,消息会分为多种类型,会据此将链表划分为多个形式的链表,当消息被读取,就会从内核中将这个消息体删除。

例如,进程可以将多个相关的数据组合成一个消息发送到队列中。

4、管道

依据:管道是基于文件描述符的半双工通信方式,数据在管道中顺序流动,内核需要进行数据的复制和缓冲管理。管道可以分为有名管道和无名管道,有名管道创建方式:mkfifo,而且实现进程间通信不适合频繁读取和写入数据,另外也存在用户和内核中数据的拷贝。无名管道只可以在父子进程间通信,常通过fork实现,管道生存周期也与进程生存周期有关。

例如,父进程向管道中写入数据,子进程从管道中读取数据,会存在数据复制的过程。

5、套接字

依据:套接字常用于网络环境中的进程间通信,涉及到更多的网络协议处理和数据封装、解封装,效率相对较低。

例如,通过网络套接字在不同主机上的进程间通信时,数据需要经过网络传输和多层协议处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值