【发布时间】:2013-08-24 20:00:45
【问题描述】:
我看到here(关于 IPC 的维基百科文章)这是两个不同的东西,但即使阅读每个人的专用 Wikipedia 页面,我也不明白有什么区别。
谁能简单解释一下?
【问题讨论】:
标签: message-queue message-passing
我看到here(关于 IPC 的维基百科文章)这是两个不同的东西,但即使阅读每个人的专用 Wikipedia 页面,我也不明白有什么区别。
谁能简单解释一下?
【问题讨论】:
标签: message-queue message-passing
消息传递是一个非常笼统的术语。可以从不同方面进行检查,其中之一是数据如何从发送方传输到接收方:
同步消息传递:发送方和接收方必须在各自的send/receive 操作中“相遇”,才能传输数据。这也称为“会合”或“握手”。这种传输形式很简单,但可能效率低下,因为发送方可能必须等待,即使它已完成职责并准备好要发送的数据。
异步消息传递:发送方不等待接收方到达其receive 操作,而是摆脱准备好的数据并继续执行。这种传输形式不会强制发送者等待,但会产生另一个问题:可能有消息已经发送但尚未接收,它们必须存储在某个地方。这就是消息队列发挥作用的地方,它们是传输中消息的缓冲区。
因此,您的问题的答案是,当消息传递是异步而不是同步完成时,使用/需要消息队列。
【讨论】:
在我看来,消息传递描述了一个协议,而消息队列是一个实现细节。
考虑以下几点: 您的应用程序具有通过传递消息来交换数据的明确定义的方式。这意味着您已经实现了一个协议,该协议描述了可以发送哪些消息以及应用程序如何对其做出反应。这就是我所说的本质上的消息传递。
现在,您可能已经通过多种方式实现了这一点。
消息队列是一种实现,它接收通过消息传递传递的协议消息并存储它们。这使得它们可以按照它们到达的顺序一一提供给您的应用程序内部。但还有很多。
所以消息传递只是一种表达方式:“我有这个指令或代码块,我想传递给某人”。表示消息队列的程序是消息的接收者,可以对其应用额外的逻辑。
【讨论】: