共享内存
介绍
1.共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。
2.当共享内存创建出来后,通过系统调用挂接到对应的进程当中,操作系统会给进程分配一个mm_struct上的虚拟地址空间(在堆栈之间的共享代码区),通过页表建立与物理内存的映射,从而实现对共享内存的访问。
3.共享内存块不属于某个进程,而属于操作系统。
4.不同于pipe和fifo通过read,write来进行通信,共享内存属于用户空间,可以直接进行内存级的读和写。
相关函数
见我之前的文章
知识点
1.system V IPC资源,生命周期随内核。
2.不同于管道存在于操作系统的3-4g的内核地址空间,共享内存在0-3g的用户地址空间,所以无需调用系统接口进行IO。
3.共享内存缺乏访问控制,会带来并发问题。
消息队列
介绍
消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构
向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点
消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法
消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限
相关函数
知乎大佬