cpp-ipc (libipc) - C++ IPC 库
一个使用共享内存在 Linux/Windows 上实现的高性能进程间通信库。
- 推荐使用支持 C++17 的编译器(msvc-2017/gcc-7/clang-4)
- 除 STL 外无其他依赖
- 仅使用无锁或轻量级自旋锁
- 底层数据结构使用循环数组
ipc::route
支持单读多写。ipc::channel
支持多读多写。(注意:目前一个通道最多支持 32 个接收者,但发送者没有限制。)- 默认使用广播模式,但用户可以选择任意读写组合
- 无长时间盲等待(在一定次数重试后将使用信号量)
- 支持 Vcpkg 安装方式。例如:
vcpkg install cpp-ipc
使用方法
参见:Wiki
性能
环境 | 值 |
---|---|
设备 | 联想 ThinkPad T450 |
CPU | Intel® Core™ i5-4300U @ 2.5 GHz |
内存 | 16 GB |
操作系统 | Windows 7 旗舰版 x64 |
编译器 | MSVC 2017 15.9.4 |
单元测试和基准测试:test
性能数据:performance.xlsx
参考资料
- 无锁数据结构 | Dr Dobb's
- 另一种无锁循环数组队列的实现 | CodeProject
- 无锁编程 | 匠心十年 - 博客园
- 无锁队列的实现 | 酷 壳 - CoolShell
- 使用信号量实现条件变量
使用共享内存的跨平台(Linux/Windows,x86/x64/ARM)高性能IPC通讯库
- 推荐支持C++17的编译器(msvc-2017/gcc-7/clang-4)
- 除STL外,无其他依赖
- 无锁(lock-free)或轻量级spin-lock
- 底层数据结构为循环数组(circular array)
ipc::route
支持单写多读,ipc::channel
支持多写多读【注意:目前同一条通道最多支持32个receiver,sender无限制】- 默认采用广播模式收发数据,支持用户任意选择读写方案
- 不会长时间忙等(重试一定次数后会使用信号量进行等待),支持超时
- 支持Vcpkg方式安装,如
vcpkg install cpp-ipc
使用方法
详见:Wiki
性能
环境 | 值 |
---|---|
设备 | 联想 ThinkPad T450 |
CPU | 英特尔® Core™ i5-4300U @ 2.5 GHz |
内存 | 16 GB |
操作系统 | Windows 7 旗舰版 x64 |
编译器 | MSVC 2017 15.9.4 |
单元测试和Benchmark测试: test
性能数据: performance.xlsx