【发布时间】:2011-07-26 03:23:06
【问题描述】:
我希望在单进程多线程应用程序上使用 POSIX 消息队列。 mqueues 将用于在线程之间共享数据。
我对它们在 Linux 内核中的工作方式有些困惑。是否所有消息都通过内核空间,然后在接收时返回用户空间?又名从用户空间线程我执行 mq_send 并且消息最终在内核空间中,然后在接收它时是另一个系统调用以从内核空间获取消息。如果是这样,对于高使用率的消息队列来说,这不是非常低效吗?
【问题讨论】:
-
一个警告,比您更针对未来的读者:请注意 SysV IPC 对象(例如消息队列)是持久的。如果您的程序创建了一个但没有删除它,它将在程序退出后继续存在。将队列视为更像文件而不是套接字(只是更难管理,因为它们有 ID 而不是路径)。考虑在安装过程中而不是在执行过程中创建它们。
-
@Tom Anderson:POSIX 消息队列与 SysV 不同;它们也是持久的和类似的文件,但在 Linux 下,您可以挂载文件系统,查看它们并使用“rm”删除它们。 POSIX 消息队列的名称不是数字。
-
@MarkR:这是一个很好的观点,我完全错过了 - 感谢您的更正。
标签: linux posix message-queue