你使用过sysv/posix消息队列吗?

8

我从未见过任何使用posixsysv消息队列的项目或其他内容。好奇的是,你们用它们解决了哪些问题或实现了哪些项目?

3个回答

2
我有一系列需要按顺序执行的命令,但主程序流程不依赖它们的完成,所以我将它们排队并通过System V消息队列传递给另一个进程独立执行。由于消息队列提供异步通信协议,因此它们非常适合这个任务。
说实话,我使用System V消息队列是因为我以前从未使用过,而且我想尝试一下。我相信还有其他可以用的IPC方法。
自从我做了真正的VxWorks编程以来已经有一段时间了,但是您也可以在VxWorks应用程序中找到使用消息队列。根据《VxWorks应用程序员指南》(谷歌搜索),在单个CPU内的主要任务间通信机制是消息队列。VxWorks使用两个消息队列子例程库(POSIX和VxWorks)。

1

我曾经编写过一个文本模式的I/O生成器实用程序,其中一个线程负责更新UI,多个工作线程执行实际的I/O工作。当工作线程完成I/O时,它会向UI线程发送更新消息。我使用POSIX消息队列实现了这个消息系统。

为什么要这样实现呢?当时听起来像个好主意,而且我对它们的工作原理很感兴趣。我想我可以解决问题并同时学到一些东西。我可以使用许多不同的技术,我不认为我选择这种技术有任何深刻的原因。后来我才意识到,当我不得不将实用程序移植到另一个系统时(它也符合POSIX标准),我很高兴我使用了POSIX队列(这样我就不必担心移植外部库以使我的应用程序运行)。


1

你可以肯定地使用它作为IPC机制。通过这种机制,您可以编写多进程事件处理应用程序,其中所有应用程序都使用队列,并且每个应用程序都在等待特殊类型的消息(特殊事件发生)。当消息到达时,该进程接收消息,处理并将结果放回队列,以便其他进程可以使用它。
我曾经使用消息队列编写过这样的应用程序。它非常容易使用,不需要诸如信号量之类的进程间同步机制。在只需要向其他进程发送结构体或某种打包数据的情况下,您也可以将其用于共享内存或内存映射文件的位置。相比任何其他IPC机制,消息队列更容易使用。
这本书包含有关Linux中消息队列和其他IPC机制的所有信息。


你还没有解释为什么有人会想要这些陈旧的东西,而不是使用 sockets。 - tchrist
实际上,消息队列允许您将多个应用程序相互分离,并创建消息代理架构,使不同的组件能够相互分离;并且允许您实现类似RPC的机制,套接字可以用作传输机制来实现这种架构,但是您需要一个更高级别的协议。要了解有关消息队列的更多信息,请参阅http://www.zeromq.org。 - gst

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