c++11 - 对象的 IPC 共享 -ZeroMQ 或 Boost::interprocess 哪个更快?
问题描述
我正在考虑自定义对象的进程间共享。我当前的实现使用 ZeroMQ,其中对象被打包成一条消息并从进程 A 发送到进程 B。
我想知道使用 boost::interprocess 实现并发容器是否会更快(其中进程 A 将插入容器,进程 B 将从容器中检索)。不确定这是否比必须在进程 A 中序列化对象然后在进程 B 中反序列化它更快。
只是想知道是否有人做过基准测试?将两者进行比较在概念上是否正确?
解决方案
原则上,ZeroMq 应该更慢,因为它使用的比喻是消息的传递。这些类型的库并非旨在就地共享内存区域,也不是为了让不同的进程能够同时修改它们。
具体来说,您提到了“包装”。共享内存区域时,您可以 - 理想情况下 - 避免任何打包并按原样处理数据(当然,在并发使用相同的数据结构时需要小心,使用偏移量而不是指针等)
另请注意,即使共享是单向来回(即一次只有一个进程访问任何数据),ZeroMq 也只能匹配 IPC 共享内存的使用,前提是它一直支持零复制下。从关于零复制的常见问题解答页面中我不清楚这一点(但无论如何可能是这种情况)。
推荐阅读
- python - 如何在 AWS Lambda 中将位置传递给 selenium_driver.save_screenshot("test.png")?无法从 aws lambda 保存屏幕截图
- python - 返回垂直堆叠在给定对象上方的所有对象的列表?
- css - 如何使用css隐藏svg图像内的矩形部分
- java - Java:是否可以在没有反射的情况下反序列化对象
- python - Python如何捕获检测到的二维码?
- excel - 如何将日期单元格(独立于语言环境)连接到 Excel 中的字符串?
- reactjs - React:如何通过 Firestore onSnapshot 和 useEffect 使用最新状态?
- .net-core - .Net Standard 2.0 和 .Net Framework 4.6.1 与 4.7.2
- matlab - 将 0 和 1 的 char 向量拆分为加倍
- linux - Docker 容器未启动