消息队列
- 消息队列(
message queue
)即消息的列表,亦称报文队列
,也叫做信箱
。是Linux的一种通信机制,这种通信机制传递的数据具有某种结构,而不是简单的字节流[1]。 - 消息队列的本质
其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点
[1]。 - 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法,其也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限[1]。
共享内存
- 为了在多个进程间交换信息,内核专门留出了一块内存区。这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读写这一内存区而不需要进行数据的复制,从而大大提高了效率。
- 由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁
和信号量等。
- 共享内存实现步骤:
- 创建共享内存,即从内核内存中拿取一段共享内存区域。
- 映射共享内存,即把拿去的共享内存区域映射到具体的进程空间中。
- 此外,还有撤销映射的操作。
- 参考文献:《Linux嵌入式应用程序开发标准教程》
- 参考资料: https://zhuanlan.zhihu.com/p/268389190