要求
研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接
- 共享内存
- 管道
- FIFO
- 信号
- 消息队列
研究博客
管道(PIPE)
- 管道(PIPE):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子进程)的进程间使用。另外管道传送的是无格式的字节流,并且管道缓冲区的大小是有限的(管道缓冲区存在于内存中,在管道创建时,为缓冲区分配一个页面大小)。
管道只能在本地计算机中使用,而不可用于网络间的通信。
参考示例
有名管道 (FIFO):
- 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
管道因为没有名字所以只能用于具有亲缘关系的进程,而有名管道(FIFO)则克服了这个限制。
参考示例
信号
- 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
消息队列(Message Queue):
- 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享内存(Shared Memory):
- 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
参考示例
mmap函数就是一个很好的示例
- mmap系统调用是的是的进程间通过映射同一个普通文件实现共享内存.普通文件被映射到进程地址空间后,进程可以向像访问普通内存一样对文件进行访问,不必再调用read,write等操作
码云链接
博客参考
- 管道
- Linux管道读写规则
- 消息队列
- 内存反映机制处理大文件
- Linux的进程/线程间通信方式总结
- 虚拟内存与内存映射文件区别与联系