首页 > 解决方案 > 对象的 IPC 共享 -ZeroMQ 或 Boost::interprocess 哪个更快?

问题描述

我正在考虑自定义对象的进程间共享。我当前的实现使用 ZeroMQ,其中对象被打包成一条消息并从进程 A 发送到进程 B。

我想知道使用 boost::interprocess 实现并发容器是否会更快(其中进程 A 将插入容器,进程 B 将从容器中检索)。不确定这是否比必须在进程 A 中序列化对象然后在进程 B 中反序列化它更快。

只是想知道是否有人做过基准测试?将两者进行比较在概念上是否正确?

标签: c++11ipczeromqboost-interprocess

解决方案


原则上,ZeroMq 应该更慢,因为它使用的比喻是消息的传递。这些类型的库并非旨在就地共享内存区域,也不是为了让不同的进程能够同时修改它们。

具体来说,您提到了“包装”。共享内存区域时,您可以 - 理想情况下 - 避免任何打包并按原样处理数据(当然,在并发使用相同的数据结构时需要小心,使用偏移量而不是指针等)

另请注意,即使共享是单向来回(即一次只有一个进程访问任何数据),ZeroMq 也只能匹配 IPC 共享内存的使用,前提是它一直支持零复制下。从关于零复制的常见问题解答页面中我不清楚这一点(但无论如何可能是这种情况)。


推荐阅读