我最近一直在Linux中使用消息队列(SystemV,但POSIX也应该可以),它们似乎非常适合我的应用程序,但在阅读了Unix编程的艺术之后,我不确定它们是否真的是一个好的 Select .

http://www.faqs.org/docs/artu/ch07s02.html#id2922148

SystemV IPC的上层消息传递层已基本停止使用.底层由共享内存和信号量组成,在需要在同一台机器上运行的进程之间执行互斥锁定和一些全局数据共享的情况下,仍然有重要的apply.这些System V共享内存设施演变成POSIX共享内存API,在Linux、BSDs、MacOS X和Windows下受支持,但在classic MacOS下不受支持.

http://www.faqs.org/docs/artu/ch07s03.html#id2923376

System V IPC设施存在于Linux和其他现代大学中.然而,由于它们是一个遗留特性,因此不经常使用它们.截至2003年年中,Linux版本仍然存在漏洞.似乎没有人足够关心修复它们.

在较新的Linux版本中,SystemV消息队列是否仍然存在缺陷?我不确定作者的意思是否是POSIX消息队列应该正常?

插座似乎是几乎所有产品的首选IPC(?),但我看不出用套接字或其他东西实现消息队列是多么简单.还是我想得太复杂了?

我不知道这是否与我使用嵌入式Linux有关?

推荐答案

就我个人而言,我非常喜欢消息队列,并且认为它们可以说是unix世界中使用率最低的IPC.它们快速且易于使用.

有几个 idea :

  • 有些只是时尚.旧事物又会变成新事物.在消息队列中添加一个shiny 的do dad,它们可能会成为明年最新、最热门的东西.看看谷歌的Chrome浏览器,它的标签使用单独的进程,而不是线程.突然间,当一个标签被锁定时,却不会关闭整个浏览器,这让人们兴奋不已.

  • 共享记忆有点像男人的光环.如果你不从机器中挤出最后一个周期,而MQs的效率则稍低,那么你就不是一个"真正的"程序员.对许多应用程序来说,这完全是胡说八道,但有时一旦它站稳脚跟,就很难打破思维定势.

  • MQs确实不适用于具有无限数据的应用程序.面向流的机制,比如管道或插座,更容易使用.

  • SystemV的变种真的不受欢迎了.一般来说,如果可以的话,可以使用POSIX版本的IPC.

Linux相关问答推荐

一个关于Linux中的fork()和物理地址的奇怪问题

在Groff mm中定义页眉不会更改第一页中的页眉

pci_user_write_config_word在哪里实现?

在linux中,我想将昨天的文件与今天的文件进行比较,仅将今天的更改作为输出,忽略一些字段

JSON 转义 CURL/JQ 输出

在 Bash 中使用 shell 脚本从文件中解析版本号

线程创建会在 Linux 中触发页面错误吗?它与软脏 PTE 有什么关系?

将 Visual Studio C++ 项目迁移到 Linux 和 CMake

我想使用排序命令对第 5 列进行日期排序.但问题是格式不一致,有什么方法可以做到吗?

如何使用 shell 脚本查找具有最大上下文长度的行号?

如何在ubuntu中通过.sh文件启动多个服务

Linux 上 pid_t、uid_t、gid_t 的大小

PuTTY:更改默认 SSH 登录目录

如何通过 ssh 判断 ubuntu 服务器上是否存在 php 和 apache

php.ini 更改,但在 Ubuntu 上无效

将 CMake 项目导入 Eclipse CDT

根据文件名模式和文件内容列出文件名?

我可以告诉 Linux 不要换出特定进程的内存吗?

如何运行我所有的 PHPUnit 测试?

如何为 Git 命令设置自动完成功能?