Boost.Interprocess 是不是牺牲性能来实现可移植性

Posted

技术标签:

【中文标题】Boost.Interprocess 是不是牺牲性能来实现可移植性【英文标题】:Does Boost.Interprocess sacrifice performance to achieve portabilityBoost.Interprocess 是否牺牲性能来实现可移植性 【发布时间】:2015-10-09 15:49:12 【问题描述】:

我刚刚阅读了 Boost.Interprocess 文档的this page。似乎暗示为了适应不同操作系统之间的差异并达成某种协议,某些进程间机制不是用操作系统提供的直接对应的本机机制来实现的,而是用其他机制来模拟的。我想知道这是否会对性能造成相当大的影响。

该页面上的最后一部分对我来说特别重要,下面引用了它

由于每种机制都可以通过不同的机制来模拟(a 信号量可以使用映射文件或本机信号量来实现) 当命名的实现时,权限类型可能会有所不同 资源更改(例如:在 Windows 互斥锁中需要同步 权限,但文件不是这种情况)。为了避免这种情况, Boost.Interprocess 依赖类文件权限,需要文件 打开命名同步机制的读写删除权限 (互斥量、信号量等)和适当的读取或读写删除 共享内存的权限。这种方法有两个优点: 类似于 UNIX 哲学,程序员不需要 知道命名资源是如何实现的。

根据本文,我猜测大部分由 Windows 原生提供的用于进程间同步的kernel objects(例如,事件、互斥、信号量)都没有被 Boost.Interprocess 使用。

【问题讨论】:

阅读源代码,基准测试,不要外包给 SO Boost 具有适用于 Posix 系统(如 Linux)和 Windows 的平台特定代码,以及基于共享内存构建的通用版本。 【参考方案1】:

我以前见过使用本机内核对象。

当我阅读它时,该消息仅涉及权限

它提到这是在底层对象具有不同访问控制的情况下模拟的。它实际上并没有提到它是如何被模拟的。

【讨论】:

以上是关于Boost.Interprocess 是不是牺牲性能来实现可移植性的主要内容,如果未能解决你的问题,请参考以下文章

boost::interprocess::named_mutex 是不是需要存储在共享内存中?

错误:‘size_type’不是‘boost::interprocess::message_queue’的成员

检查 Boost Interprocess managed_shared_memory 是不是已经存在? [复制]

Boost.Interprocess内存位置

boost::interprocess::string 转换为 char*

boost::interprocess_mutex 与进程本地 boost::mutex