在操作系统中,消息队列和邮箱有什么区别?
在操作系统中,消息队列和邮箱有什么区别?
我怀疑目前没有普遍被接受的关于消息队列和邮箱区别的定义。每个RTOS可能会使用不同的术语和实现细节,因此您需要分别查看每个RTOS。
一般来说,其中一些常见的差异包括:
在计算机中,队列通常指具有先进先出(FIFO)访问语义的容器数据结构。在RTOS队列中,对队列的访问将是线程安全的,并具有阻塞语义。
另一方面,邮箱没有普遍被接受的特定语义,我曾经看到这个术语用于指代非常不同的RTOS IPC机制。在某些情况下,实际上存在队列,但如果RTOS还支持IPC队列,则邮箱将具有不同的语义 - 通常涉及内存管理。在其他情况下,邮箱可能本质上是长度为1的队列 - 即具有队列的阻塞和IPC功能,但没有缓冲。这种机制允许进程之间进行同步通信。
邮箱是使用队列和信号量实现的。如果多个线程使用邮箱put()方法阻塞在将数据推送到已满队列上,当空间可用时,只有一个线程可以看到可用空间并允许以原子循环将数据推送到队列中。没有原子保证,另一个线程可以在另一个线程检查大小并推送数据的时间内将数据推送到队列中。
同样,如果有多个线程正在等待从空队列获取数据,则也可以以原子方式实现。
但是与队列相比,邮箱具有额外的开销。