问题标签 [boost-interprocess]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 寻找 Boost message_queue 和序列化用法的简单示例
任何人都可以分享一起使用 boost message_queue 和序列化的小型工作示例吗?我想使用类在进程之间交换数据,但停留在我的研究中。
c++ - boost::interprocess message_queue 性能 - 相当慢?
我需要一个超快的 MQ 机制,发送者和接收者都是在 Windows 平台上用 C++ 编写的。
我当前使用RCF-C++进行 IPC 的实现在 Windows 命名管道上的时钟速度约为 20,000 msg/sec。
我正在根据演示应用程序测试 boost::interprocess Message Queues 的性能,并且测量到大约 48,000 条消息/秒,考虑到当我在同一台机器上编写一个简单的内存映射文件通信时(在C# 使用此博客文章中的代码),我每秒收到大约 150,000 条消息。
关于为什么我从 boost message_queue 中获得如此缓慢的性能以及我可以尝试改进它的任何想法?
dll - boost::interprocess::shared_memory_object::remove 失败
我做了一些测试,我能够在 C++/CLI 可执行文件中创建和删除 boost::interprocess::shared_memory_object 没有问题。在 C++/CLI dll 插件中,我只能创建 boost::interprocess::shared_memory_object 但删除失败。我验证了该文件在删除时存在 - 它存在于 boost::interprocess 文件夹中名为“20110606204418.125000”的子文件夹中。内存尚未被任何其他进程映射。任何想法可能是什么原因?一开始我认为这可能与作为 dll 并针对 CLR 的项目有关,但老实说我不知道。编辑:删除代码由与创建代码不同的线程调用 - 这是不允许的吗?
shared-memory - 如何将共享内存段固定到物理内存中
我用来boost::interprocess::managed_shared_memory
在共享内存中加载数据结构。我需要将共享内存段固定到物理内存中(例如类似于映射文件的系统调用 mlock)。
在 linux 中,我的数据结构迟早会从物理内存中换出。在我的情况下,这会为下一个访问该结构的进程带来高昂的成本,在它被换出之后。
有没有办法将共享内存固定到物理内存中?我对任何解决方案都感兴趣,即使这意味着我不能使用boost::interprocess
.
c++ - Boost iostream:如何将 ifstream 转换为内存映射文件?
我想要的是简单地打开文件以读取内存映射文件 - 以便将来以更快的速度访问它(例如:我们打开文件读取它以结束,等待并一次又一次地读取它)同时我想要那个文件可以被其他程序修改,当他们修改它时,我希望我的 ifstream 也修改。如何使用 boost iostreams(或 boost 进程间)做这样的事情?我们可以只做高操作系统吗?嘿,这个文件应该是所有应用程序的内存映射吗?
所以我尝试这样的代码:
因此它打开或创建文件,将其放入 ram。但我无法从任何其他程序访问它(我无法编辑和保存,但我可以打开)=(如何使文件可从其他程序编辑?
c++ - boost::interprocess::named_mutex 是否需要存储在共享内存中?
我想用来boost::interprocess
跨多个进程执行同步;具体我想boost::interprocessnamed_mutex
在 Linux OS 下使用(我使用的是 g++)。
你知道这个类的每个实例是否必须像 simple 一样存储在共享内存中boost::interprocess::mutex
吗?
boost - 提升消息队列
我有以下 boost::interprocess::message_queue 相关问题。
正如预期的那样,我计划在 >= 2 个进程之间共享一个消息队列。显然,其中一个可能会在消息队列中崩溃。结果,它将持有内部锁,使其他进程无法访问队列。如何解决?似乎没有办法解锁使用的内部互斥锁。
c++ - boost::unordered_map 使用 boost::interprocess::cached_node_allocator 编译失败
我正在尝试在 boost::interprocess::managed_shared_memory 段中创建一个 boost::unordered_map。这工作正常,直到我尝试从使用 boost::interprocess::allocator 更改为 boost::interprocess::cached_node_allocator。
似乎 hash_bucket 结构推迟了密钥大小的计算,但 cached_node_allocator 在编译时需要大小。关于如何使这项工作的任何想法?
示例代码:
海合会输出:
c++ - boost::interprocess::basic_string 作为 std::string
我正在尝试用const boost::interprocess::basic_string &替换返回const std::string &的类方法。我面临的主要挑战是这两个类之间的不兼容,尽管它们的实现相似。为了更清楚的解释,我会将其放入代码中
现在这个类必须看起来像这样:
问题是我们有一个庞大的代码库,这取决于:
即使我用 const ShMemString & 替换了预期结果的所有代码,也修复以下用途将是一项更加艰巨的工作。我惊讶地发现 boost 的字符串不包含来自 std::string 的任何比较/构造方法。
关于如何解决这个问题的任何想法?
c++ - boost-interprocess 中的缓慢内存分配
它看起来像这样:
其中MyType是一些典型的结构并且my_segment是正确构造的boost::interprocess::managed_shared_memory * 比同等结构慢大约 10 倍:
我没想到会这样。我虽然这两种分配算法在实现和性能上应该是相似的。如此巨大的差异是否有充分的理由。
编辑:测试是在大量迭代中进行的。