10分钟上手C++共享内存IPC:Shadesmar安装与快速开始完整教程

发布时间:2026/8/26 19:53:02
10分钟上手C++共享内存IPC:Shadesmar安装与快速开始完整教程 10分钟上手C共享内存IPCShadesmar安装与快速开始完整教程【免费下载链接】shadesmarFast C IPC using shared memory项目地址: https://gitcode.com/gh_mirrors/sh/shadesmarShadesmar 是一个基于共享内存的快速 C IPC进程间通信库支持**发布订阅Pub/Sub**和RPC两种通信模式绕过网络栈直接传消息实现高吞吐、低延迟的跨进程数据传输。本文带你 10 分钟完成 Shadesmar 安装、配置与快速上手。一、Shadesmar是什么基于共享内存的快速IPC库传统进程间通信常依赖 Socket 网络栈数据要经过内核多次拷贝延迟较大。Shadesmar 的思路很直接利用操作系统的共享内存段在进程之间传递消息内部用环形缓冲circular buffer承载消息队列架构去中心化没有中心节点避免资源饥饿问题提供自定义 Copier拷贝器接口可以最小化、优化数据移动。 典型适用场景同一台机器上多个 C 进程之间需要高频交换中大数据的场景如游戏服务器、量化行情分发、本地微服务间通信。核心特性一览特性说明多发布/多订阅支持多个发布者与多个订阅者环形缓冲传消息进程间通过共享内存中的环形队列传递消息比网络栈更快大消息场景下高吞吐、低延迟去中心化设计无单点瓶颈避免资源饥饿可定制拷贝器通过自定义 Copier 优化数据移动⚠️ 注意Shadesmar 目前为 Alpha 阶段的软件仅支持Linux x86平台。二、环境要求与快速安装步骤1. 环境要求项目要求操作系统Linux架构x86C 标准C14构建工具CMake ≥ 3.102. 一键安装步骤第一步获取源码git clone https://gitcode.com/gh_mirrors/sh/shadesmar cd shadesmar第二步初始化构建目录项目自带configure脚本会自动创建build/目录并执行 CMake 配置./configure Release第三步编译测试与基准程序cd build make -j4编译完成后build/目录下会生成 4 个测试可执行文件pubsub_test、rpc_test、dragons_test、allocator_test和 3 个基准测试程序。✅ 至此Shadesmar 安装完成。 如果后续要运行完整的基准测试benchmark需要额外安装 Google Benchmark 库项目提供了scripts/install_deps.sh一键脚本。三、快速开始两种接入方式Shadesmar 的使用极其轻量——它本质上是一组头文件有两种接入方式方式一直接使用单头文件推荐新手项目提供了一份由源码合并生成的单头文件release/shadesmar.h把它放到你的头文件搜索路径中即可无需编译库本体#include shadesmar.h // 单头文件版本如果你修改了源码并想重新生成单头文件运行python3 simul/simul.py该脚本simul/simul.py会把所有头文件合并输出到include/目录。方式二源码接入CMake 工程在 CMake 工程中将include/加入包含路径并链接rt、pthread、stdcfs即可。若希望编译时走单头文件模式可参考CMakeLists.txt中的SINGLE_H选项对应-DSINGLE_HEADER宏。四、发布订阅快速示例Pub/Sub发布订阅是 Shadesmar 的核心模式之一发布者向主题topic写入消息订阅者通过回调接收。发布者对应include/shadesmar/pubsub/publisher.h#include shadesmar/pubsub/publisher.h int main() { shm::pubsub::Publisher p(topic_name); const uint32_t data_size 1024; void *data malloc(data_size); for (int i 0; i 1000; i) { p.publish(data, data_size); } }订阅者对应include/shadesmar/pubsub/subscriber.h#include shadesmar/pubsub/subscriber.h void callback(shm::memory::Memblock *msg) { // msg-ptr 访问数据msg-size 获取大小 // 回调结束时内存会被释放需要保留数据请自行拷贝 // 或调用 msg-no_delete() 阻止自动释放 } int main() { shm::pubsub::Subscriber sub(topic_name, callback); sub.spin(); // 或手动循环调用 sub.spin_once() }只需两行代码一个发布订阅系统就跑起来了 五、RPC快速示例跨进程请求响应Shadesmar 同样内置了 RPC 支持源码位于include/shadesmar/rpc/客户端调用与服务端响应同样简单。客户端对应client.h#include shadesmar/rpc/client.h int main() { shm::rpc::Client client(channel_name); shm::memory::Memblock req, resp; // 填充 req 后发起调用 client.call(req, resp); // 使用 resp 后需显式释放 client.free_resp(resp); }服务端对应server.h#include shadesmar/rpc/server.h bool callback(const shm::memory::Memblock req, shm::memory::Memblock *resp) { // 处理请求将结果写入 resp return true; } int main() { shm::rpc::Server server(channel_name, callback, clean_up); server.serve(); // 或手动循环调用 server.serve_once() }六、项目结构与核心模块一览熟悉目录结构有助于你按需阅读源码模块路径作用include/shadesmar/pubsub/发布订阅publisher.h、subscriber.h、topic.hinclude/shadesmar/rpc/RPCclient.h、server.h、channel.hinclude/shadesmar/memory/共享内存管理、分配器与拷贝器include/shadesmar/concurrency/并发原语锁、条件变量、无锁集合include/catch.hpp内置的 Catch 测试框架头文件test/各模块单元测试benchmark/Pub/Sub 与 RPC 基准测试simul/simul.py单头文件合并工具scripts/依赖安装、测试、格式化、Lint 脚本底层原理值得一看include/shadesmar/memory/memory.h中通过shm_open创建形如/SHM_名称的共享内存段并mmap映射进程内再划分出 PID 集合、共享队列与 256MB 数据缓冲区等区域。七、运行测试与基准测试运行单元测试每个模块都有独立可执行文件cd build ./pubsub_test ./rpc_test项目也提供了scripts/run_tests.sh批量执行所有测试并在每轮之间清理/dev/shm/SHM_*共享内存残留。运行基准测试benchmark/pubsub.cpp与benchmark/rpc.cpp展示了消息吞吐的典型用法dragons_bench需先通过scripts/install_deps.sh安装 Google Benchmark 依赖。八、新手常见问题与注意事项运行环境仅支持 Linux x86macOS/ARM 暂不可用残留共享内存异常退出后/dev/shm/下可能残留SHM_*文件可手动清理内存生命周期订阅者回调中的消息内存会在回调结束时释放需要持久化请提前拷贝或调用no_delete()Alpha 阶段API 未来可能调整生产环境请做好评估消息过大共享队列定长QUEUE_SIZE 1024订阅者落后过多时会自动跳读jumpahead高频场景建议控制单条消息大小。总结Shadesmar 用极小的 API 面解决了本机进程间高速传数据这一刚需共享内存 环形缓冲 去中心化的设计让 Pub/Sub 和 RPC 都只需几行代码即可跑通。按照本文步骤你现在应该已经完成安装、跑通示例并能读懂它的模块结构。下一步建议阅读test/下的单元测试并用benchmark/实测你的消息大小下的吞吐表现。【免费下载链接】shadesmarFast C IPC using shared memory项目地址: https://gitcode.com/gh_mirrors/sh/shadesmar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考