Ris*_*hiD 6 linux posix message-queue
我期待在单个进程多线程应用程序上使用POSIX消息队列.mqueues将用于在线程之间共享数据.
我对它们在Linux内核中的工作方式感到有些困惑.是否所有消息都通过内核空间然后返回到接收上的用户空间?又来自用户空间线程,我做一个mq_send,消息最终在内核空间中,然后在接收时,它是从内核空间获取消息的另一个系统调用.如果是这样,对于高使用率的消息队列来说这不是非常低效吗?
是的,它们将始终通过内核(通常用于进程间通信).如果您只是想要线程间通信,那么您可以通过.一个简单的工作队列(使用普通的旧互斥体).
如果你想要具有更多功能的东西,你几乎肯定会更好地看待像AMQP这样的东西.
传统上Unix/Linux使用套接字+读/写,但它取决于你想要的(以及你想如何使用它).
好吧,我不得不反对MQ是"高度"低效的概念.
确实,在向/从内核复制数据方面存在一些开销,对于真正的高性能应用程序而言,这可能是使用共享或堆内存的真正考虑和理由.
但缺乏编写良好的共享内存代码MQ是最快的IPC,并配备了大量的内置工具.消除了同步化的麻烦,并且(至少在linux下)消息队列描述符(mqd_t)可以用作select()语句中的文件描述符.除了等待互斥或不断轮询互斥之外,这还可以提供相当大的灵活性.另外,MQ是内核持久性的,如果队列数据在应用程序崩溃中存活很重要,那么这是一个很好的小功能.
归档时间: |
|
查看次数: |
3926 次 |
最近记录: |