2013-08-22 285 views
5

我看到here(关于IPC的维基百科文章),这些是两个独立的东西,但即使阅读每个人的专用维基百科页面,我也不明白它们有什么不同。消息队列与消息传递

有人可以解释这一点吗?

回答

-1

正如我所看到的,Message Passing描述了一个协议,而消息队列是一个实现细节。

请考虑以下事项: 您的应用程序通过传递消息交换数据的方式明确。这意味着您已经实现了一个协议,该协议描述了可以发送什么消息以及应用程序如何响应。这就是我本质上称之为消息传递的原因。

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

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

队列将是接收与消息传递和交付您的协议的消息一实施存储它们。这使得它们可以按照它们到达的顺序逐个提供给应用程序的内部。但还有更多。

  • 队列可以查询其他队列
  • 队列可能需要一定的消息转发到另一个队列
  • 一个队列被多个客户端或转发一条消息,询问不止一个客户端

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

3

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

  • 同步消息传递:发送器和接收器具有以“满足”在其各自的send/receive操作,以便可以传输数据。这也被称为“交会”或“握手”。这种传输方式很简单,但可能效率低下,因为发件人可能必须等待,即使它已完成其职责并准​​备好要发送的数据。

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

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