我看到here(关于IPC的维基百科文章)这些是两个不同的东西,但即使阅读每一个专用的维基百科页面,我都不明白它们之间的区别。
有人可以解释一下吗?
答案 0 :(得分:7)
消息传递是一个非常通用的术语。可以从不同方面对其进行检查,其中之一是数据如何从发送方传输到接收方:
同步消息传递:发送方和接收方必须“满足”#34;在各自的send
/ receive
操作中,以便可以传输数据。这也被称为“会合”'或者'握手'。这种转移形式很简单,但可能效率低下,因为发件人可能必须等待,即使它已经完成了职责并准备好要发送的数据。
异步消息传递:发送方不等待接收方到达其receive
操作,而是取消准备好的数据并继续执行。这种转移形式不会强制发件人等待,但会产生另一个问题:可能存在已发送但尚未收到的消息,并且必须将其存储在某处。这是消息队列发挥作用的地方,它们是传输中消息的缓冲区。
所以,你的问题的答案是,当消息传递是异步完成而不是同步完成时,使用/需要消息队列。
答案 1 :(得分:-1)
正如我所看到的,Message Passing描述了一个协议,而一个消息队列是一个实现细节。
请考虑以下事项: 您的应用程序具有明确定义的方式,通过传递消息来交换数据。这意味着您已经实现了一个协议,该协议描述了可以发送哪些消息以及应用程序如何响应它。这就是我称之为消息传递的本质。
现在,您可能已经通过多种方式实现了这一点。
消息队列将是一个实现,它接收通过消息传递传递的协议消息并存储它们。这使得它们按照它们到达的顺序逐个可用于应用程序的内部。但还有更多内容。
所以消息传递只是一种说法:“我有这个指令或一大堆代码,我想传递给某人”。表示消息队列的程序是消息的接收者,可以向其应用其他逻辑。