消息队列与消息传递

Bar*_*uch 10 message-passing message-queue

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

有人能解释一下吗?

xxa*_*xxa 8

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

  • 同步消息传递:发送方和接收方必须在它们各自的send/ receive操作中"相遇",以便可以传输数据.这也称为"集合点"或"握手".这种转移形式很简单,但可能效率低下,因为即使发送者已经完成其职责并准​​备好要发送的数据,发送者也可能必须等待.

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

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


HaM*_*ter -1

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

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

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

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

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

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

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