11

我在这里看到(关于 IPC 的维基百科文章)这是两个独立的东西,但即使阅读每个人的专用维基百科页面,我也不明白有什么区别。

有人可以简单地解释一下吗?

4

2 回答 2

9

消息传递是一个非常笼统的术语。可以从不同方面进行检查,其中之一是数据如何从发送方传输到接收方:

  • 同步消息传递:发送方和接收方必须在各自的send/receive操作中“会面”才能传输数据。这也称为“会合”或“握手”。这种形式的传输很简单,但可能效率低下,因为发送者可能必须等待,即使它已经完成了它的职责并准备好要发送的数据。

  • 异步消息传递:发送方不等待接收方到达其receive操作,而是摆脱准备好的数据并继续执行。这种形式的传输不会强制发送者等待,但会产生另一个问题:可能有消息已经发送但尚未接收,它们必须存储在某个地方。这就是消息队列发挥作用的地方,它们是传输中消息的缓冲区。

因此,您的问题的答案是,当消息传递是异步而不是同步完成时,使用/需要消息队列。

于 2014-04-22T20:58:05.163 回答
-1

在我看来,消息传递描述了一个协议,而消息队列是一个实现细节。

请考虑以下几点:您的应用程序有一个定义明确的方式来通过传递消息交换数据。这意味着您已经实现了一个协议,该协议描述了可以发送哪些消息以及应用程序如何对其做出反应。这就是我所说的本质上的消息传递。

现在,您可能已经通过多种方式实现了这一点。

  • 您可能已经告诉您的应用程序接收消息,对其进行处理并返回答案,在此期间完全忽略其他传入消息。
  • 您可能已经告诉您的应用程序在每个线程处理一条消息并使用专用线程来侦听传入消息

消息队列将是一种实现,它接收通过消息传递传递的协议消息并存储它们。这使得它们可以按照它们到达的顺序一一提供给您的应用程序的内部。但还有很多。

  • queue 可以查询其他队列
  • 一个队列可能希望将某些消息转发到另一个队列
  • 一个队列被多个客户端查询或将消息转发给多个客户端

所以消息传递只是一种表达方式:“我有这个指令或代码块,我想传递给某人”。表示消息队列的程序是消息的接收者,并且可以对其应用附加逻辑。

于 2014-01-16T14:29:46.697 回答