我在维基百科上看到 here(IPC的维基百科文章),这是两个不同的东西,但即使阅读每个专门的维基百科页面,我也不明白它们之间的区别。
有人可以简单地解释一下吗?
消息传递是一个非常通用的术语。可以从不同的角度来探讨它,其中之一就是数据如何从发送方传输到接收方:
同步消息传递:发送方和接收方必须在各自的send
/receive
操作中“会面”,以便数据可以传输。这也称为“约会”或“握手”。这种传输形式很简单,但可能效率低下,因为即使发送方已经完成了其任务并准备好要发送的数据,它也可能不得不等待。
异步消息传递:发送方不等待接收方到达其receive
操作,而是摆脱准备好的数据并继续执行。这种传输方式不强迫发送方等待,但会引起另一个问题:可能有些消息已经被发送但还没有被接收,它们必须存储在某个地方。这就是消息队列发挥作用的地方,它们是正在传输中的消息的缓冲区。
因此,当消息传递是异步而不是同步时,需要使用/使用消息队列。
在我看来,消息传递描述了一种协议,而消息队列则是一种实现细节。
考虑以下情况: 您的应用程序有一种明确定义的方式通过传递消息来交换数据。这意味着您已经实现了一个协议,该协议描述了可以发送哪些消息以及应用程序对其的反应方式。这就是我所谓的本质上的消息传递。
现在,您可能已经以多种方式实现了这一点。
消息队列是一种实现,它接收使用消息传递传递的协议的消息并存储它们。这使得它们按照到达的顺序逐个对应用程序的内部可用。但其中还有很多内容。
因此,信息传递只是一种说法:“我有这个指令或代码块,我想要把它发送给某个人”。代表消息队列的程序是消息的接收者,可以对其应用其他逻辑。