Posix消息队列详解
1. 消息队列简介
消息队列可以看作是一个消息的链表。具有足够权限的线程可以将消息放入队列,也可以从队列中取出消息。每个消息都是一个记录,并且发送者会为每个消息分配一个优先级。在某个进程向队列写入消息之前,不要求有其他线程正在等待该消息的到来,这与管道和FIFOs不同,对于管道和FIFOs来说,如果没有读者,写入者就没有意义。
一个进程可以向队列写入一些消息,然后终止,后续由其他进程读取这些消息。我们说消息队列具有内核持久性,这与管道和FIFOs不同。当管道或FIFOs最后一次关闭时,其中剩余的数据会被丢弃。
Posix消息队列和System V消息队列有很多相似之处,但主要区别如下:
| 比较项 | Posix消息队列 | System V消息队列 |
| ---- | ---- | ---- |
| 读取规则 | 读取操作总是返回队列中优先级最高的最旧消息 | 读取操作可以返回任何所需优先级的消息 |
| 消息入队响应 | 当消息放入空队列时,允许生成信号或启动线程 | 无类似功能 |
每个队列上的消息都有以下属性:
- 无符号整数优先级(Posix)或长整数类型(System V)
- 消息数据部分的长度(可以为0)
- 数据本身(如果长度大于0)
这些特性与管道和FIFOs不同,后两者是没有消息边界的字节流,并且每个消息没有关联的类型。
下面是一个可能的Posix消息队列的排列图(假设为链表结构):
graph LR
classD
超级会员免费看
订阅专栏 解锁全文
1272

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



