1. 管道(Pipe)
在创建时分配一个page大小的内存,缓存区大小比较有限;
管道这种通讯方式有两种限制:
- 是半双工的通信,数据只能单向流动
- 是只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
流管道(s_pipe)
去除了第一种限制,可以双向传输.
有名管道(named pipe或者FIFO)
管道可用于具有亲缘关系的进程间的通信,而name_pipe克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
有名管道也是半双工的通信方式。
2.消息队列(Message Queue)
信息复制两次,额外的CPU消耗;不适合频繁或信息量大的通信;
3.共享内存(Share Memory)
无须复制,共享缓冲区直接附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决。
4.套接字(Socket)
作为更通用的接口,传输效率低,主要用于不同机器或跨网络的通信。
5.信号量(Semaphore)
常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段。
6.信号(signal)
参考:
linux 有名管道(FIFO)
本文介绍了Linux中多种进程间通信方式。管道有流管道和有名管道,缓存区有限,部分有半双工和亲缘关系限制;消息队列复制信息有额外CPU消耗;共享内存速度快但需自行解决同步问题;套接字用于跨网络通信;信号量用于同步;信号可参考有名管道相关内容。

3266

被折叠的 条评论
为什么被折叠?



