【问题标题】:Message Queue vs. Message passing消息队列与消息传递
【发布时间】:2013-08-24 20:00:45
【问题描述】:

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

谁能简单解释一下?

【问题讨论】:

    标签: message-queue message-passing


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 天哪,我在搜索了这么多资源后偶然发现了这个。
    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2010-10-18
      • 2010-10-18
      相关资源
      最近更新 更多