【问题标题】:What have you used sysv/posix message queues for?您使用 sysv/posix 消息队列做什么?
【发布时间】:2011-01-22 01:06:49
【问题描述】:

我从未见过任何使用 posixsysv 消息队列的项目或任何东西 - 很好奇,你们用它们解决了什么问题或项目?

【问题讨论】:

    标签: c ipc posix


    【解决方案1】:

    我有一系列命令需要按顺序执行,但主程序流程不依赖于它们的完成,所以我将它们排入队列并通过 System V 消息队列将它们传递给另一个进程以独立执行主程序。由于消息队列提供异步通信协议,因此它们非常适合此任务。

    说实话,我使用 System V 消息队列是因为我以前从未使用过它们,我也想使用它们。我确信我可以使用其他 IPC 方法。


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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 你还没有解释为什么人们会想要这些肮脏的旧东西而不是插座。
        • 实际上,消息队列允许您将多个应用程序相互分离,并创建一个允许不同组件相互分离的 Message Broker 架构;并允许您实现类似 RPC 的机制,套接字可以用作实现这种架构的传输机制,但您需要更高级别的协议。要了解有关消息队列的更多信息,请参阅 zeromq.org
        猜你喜欢
        • 2020-11-27
        • 2013-09-09
        • 2014-02-13
        • 2013-04-16
        • 2019-03-17
        • 1970-01-01
        • 2020-04-18
        • 2020-10-30
        • 1970-01-01
        相关资源
        最近更新 更多