【发布时间】:2016-01-27 02:23:39
【问题描述】:
在操作系统中,消息队列和邮箱有什么区别。
【问题讨论】:
-
这完全取决于系统以及它如何使用术语。
标签: operating-system message-queue rtos
在操作系统中,消息队列和邮箱有什么区别。
【问题讨论】:
标签: operating-system message-queue rtos
我怀疑没有普遍接受的定义来说明消息队列与邮箱的区别。每个 RTOS 可能使用不同的术语和实现细节,因此您必须单独查看每个 RTOS。
一般来说,一些常见的差异包括:
【讨论】:
queue 通常在计算中作为具有先进先出 (FIFO) 访问语义的容器数据结构具有非常精确的含义。特别是在 RTOS 队列中,对队列的访问将是线程安全的并且具有阻塞语义。
另一方面,邮箱没有普遍接受的特定语义,我看到这个术语用来指代非常不同的 RTOS IPC 机制。在某些情况下,实际上存在队列,但如果 RTOS 也支持 IPC 队列,邮箱将具有某种不同的语义——通常与内存管理有关。在其他情况下,邮箱本质上可能是长度为 1 的队列 - 即它具有队列的阻塞和 IPC 能力,但没有缓冲。这种机制允许进程之间进行同步通信。
【讨论】:
邮箱是使用队列和信号量实现的。 如果使用邮箱 put() 方法阻止多个线程将数据推送到完整队列,则在可用空间时,只有一个线程可以看到可用空间并允许以原子循环将数据推送到队列。在没有原子保证的情况下,另一个线程可以在另一个线程检查大小并推送数据时将数据推送到队列中。 同样,如果有超过 1 个线程在等待将数据清空 Queue ,也可以原子方式实现。
但与队列相比,邮箱有额外的开销。
【讨论】: