我曾经编写过一个文本模式的I/O生成器实用程序,其中一个线程负责更新UI,多个工作线程执行实际的I/O工作。当工作线程完成I/O时,它会向UI线程发送更新消息。我使用POSIX消息队列实现了这个消息系统。
为什么要这样实现呢?当时听起来像个好主意,而且我对它们的工作原理很感兴趣。我想我可以解决问题并同时学到一些东西。我可以使用许多不同的技术,我不认为我选择这种技术有任何深刻的原因。后来我才意识到,当我不得不将实用程序移植到另一个系统时(它也符合POSIX标准),我很高兴我使用了POSIX队列(这样我就不必担心移植外部库以使我的应用程序运行)。
你可以肯定地使用它作为IPC机制。通过这种机制,您可以编写多进程事件处理应用程序,其中所有应用程序都使用队列,并且每个应用程序都在等待特殊类型的消息(特殊事件发生)。当消息到达时,该进程接收消息,处理并将结果放回队列,以便其他进程可以使用它。
我曾经使用消息队列编写过这样的应用程序。它非常容易使用,不需要诸如信号量之类的进程间同步机制。在只需要向其他进程发送结构体或某种打包数据的情况下,您也可以将其用于共享内存或内存映射文件的位置。相比任何其他IPC机制,消息队列更容易使用。
这本书包含有关Linux中消息队列和其他IPC机制的所有信息。