消息队列 vs. 消息传递

13

我在维基百科上看到 here(IPC的维基百科文章),这是两个不同的东西,但即使阅读每个专门的维基百科页面,我也不明白它们之间的区别。

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

2个回答

11

消息传递是一个非常通用的术语。可以从不同的角度来探讨它,其中之一就是数据如何从发送方传输到接收方:

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

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

因此,当消息传递是异步而不是同步时,需要使用/使用消息队列。


天啊,我在搜寻了这么多资源之后偶然发现了这个。 - susenj

-1

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

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

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

  • 您可能已经告诉您的应用程序接收消息,处理它并返回答案,完全忽略其他传入的消息。
  • 您可能已经告诉您的应用程序每个线程只处理一个消息,并使用专用线程来监听传入的消息

消息队列是一种实现,它接收使用消息传递传递的协议的消息并存储它们。这使得它们按照到达的顺序逐个对应用程序的内部可用。但其中还有很多内容。

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

因此,信息传递只是一种说法:“我有这个指令或代码块,我想要把它发送给某个人”。代表消息队列的程序是消息的接收者,可以对其应用其他逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接