消息队列和邮箱的区别

问题描述 投票:0回答:3

操作系统中消息队列和邮箱有什么区别。

operating-system message-queue rtos
3个回答
12
投票

我怀疑对于消息队列与邮箱的区别还没有普遍接受的定义。每个 RTOS 可能使用不同的术语和实现细节,因此您必须单独查看每个 RTOS。

一般来说,一些常见的差异包括:

  • 通过队列/邮箱发送的消息大小是固定的还是消息大小可以变化?
  • 队列/邮箱是否保存对消息的引用或消息的副本?
  • 队列/邮箱可以容纳一条消息、多条消息还是无限的消息?

6
投票
一般来说,

队列在计算中具有非常精确的含义,作为具有先进先出(FIFO)访问语义的容器数据结构。特别是在 RTOS 队列中,对队列的访问将是线程安全的并且具有阻塞语义。 另一方面,

A

mailbox 没有普遍接受的特定语义,并且我看到该术语用于指代非常不同的 RTOS IPC 机制。在某些情况下,它们实际上是队列,但如果 RTOS 也支持 IPC 队列,则邮箱将具有某种不同的语义 - 通常与内存管理有关。在其他情况下,邮箱本质上可能是长度为 1 的队列 - 即它具有队列的阻塞和 IPC 功能,但没有缓冲。这种机制允许进程之间进行同步通信。


0
投票
邮箱是使用队列和信号量实现的。 如果使用邮箱 put() 方法阻止多个线程将数据推送到完整队列,则在空间可用时,只有一个线程可以看到可用空间并允许使用原子周期将数据推送到队列。如果没有原子保证,另一个线程可以在另一个线程检查大小并推送数据的同时将数据推送到队列。 同样如果有超过1个线程等待将数据清空 Queue ,也可以通过原子方式实现。

但是与队列相比,邮箱有额外的开销。

© www.soinside.com 2019 - 2024. All rights reserved.