2010-02-28 38 views

回答

2

我有一系列命令需要顺序执行,但主要程序流程不依赖于它们的完成,所以我排队起来,并经由被独立地执行的System V消息队列它们传递到另一个处理的主要计划。由于消息队列提供异步通信协议,因此它们非常适合执行此任务。

说实话,我用System V消息队列,因为我从来没有使用过他们,我想。我确信还有其他IPC方法可以使用。


这已经有一段时间,因为我做了任何真正的VxWorks编程,但你也可以找到在VxWorks的应用程序中使用消息队列。根据VxWorks Application Programmer's Guide(谷歌搜索),一个CPU内的主任务间通信机制是消息队列。 VxWorks使用两个消息队列子程序库(POSIX和VxWorks)。

1

我曾经写过一个文字模式的I/O生成工具,曾在负责更新UI和若干工作线程来做实际的I/O工作的一个线程。当一个工作线程完成一个I/O时,它发送一个更新消息给UI线程。我使用POSIX消息队列实现了这个消息系统。

为什么要这样实施?当时听起来是个好主意,我很好奇他们是如何工作的。我想我可以解决问题并同时学习一些东西。我可以使用许多不同的技术,而且我不认为我选择这种技术有什么深远的原因。直到后来我才意识到这一点,但当我必须将该实用程序移植到另一个系统时,我很高兴我使用了POSIX队列(它也符合POSIX标准,所以我不必担心移植外部库来获取我的应用程序运行)。

1

,因为它是一个IPC机制,您可以使用它的IPC是肯定的。通过这种机制,您可以编写多进程事件处理应用程序,其中所有应用程序都使用队列,并且每个应用程序都在等待特殊类型的消息(将发生特殊事件)。当消息到达时,进程接收消息,处理并将结果放回队列中,以便其他进程可以使用它。
一旦我使用消息队列写这样一个应用程序。使用它非常容易,并且不需要像信号量这样的进程间同步机制。在所有你需要的只是发送一个结构或某种打包数据到其他进程的情况下,你可以使用它来代替内存映射文件的共享内存。消息队列比任何其他IPC机制更容易使用。
This book包含您需要了解的有关Linux中消息队列和其他IPC机制的所有信息。

+0

你还没有解释为什么人们会想要这些蹩脚的老东西而不是套接字。 – tchrist 2013-03-01 18:26:23

+0

实际上,消息队列允许您将多个应用程序彼此分开,并创建允许不同组件彼此分离的Message Broker体系结构;并且允许你实现类似RPC的机制,套接字可以用作实现这种体系结构的传输机制,但是你需要一个更高级别的协议。要了解更多关于消息队列的信息,请参阅http://www.zeromq.org – gst 2013-04-05 10:17:49