cpp-ipc (libipc) - Biblioteca C++ IPC
Uma biblioteca de comunicação entre processos de alto desempenho usando memória compartilhada em Linux/Windows.
- Compiladores com suporte a C++17 são recomendados (msvc-2017/gcc-7/clang-4)
- Nenhuma outra dependência exceto STL.
- Somente spin-lock leve ou sem bloqueio é usado.
- A matriz circular é usada como estrutura de dados sublinhada.
-
ipc::route
suporta leitura única e gravação múltipla. ipc::channel
suporta leitura e gravação múltiplas. ( Observação: atualmente, um canal suporta até 32 receptores, mas não existe esse limite para o remetente. ) - A transmissão é usada por padrão, mas o usuário pode escolher qualquer combinação de leitura/gravação.
- Não há muito tempo de espera cega. (O semáforo será usado após um certo número de tentativas.)
- O modo de instalação do Vcpkg é suportado. Por exemplo,
vcpkg install cpp-ipc
Uso
Veja: Wiki
Desempenho
Ambiente | Valor |
---|
Dispositivo | Lenovo Think Pad T450 |
CPU | Intel® Core™ i5-4300U a 2,5 GHz |
BATER | 16 GB |
SO | Windows 7 final x64 |
Compilador | MSVC 2017 15.9.4 |
Testes de unidade e benchmark: teste
Dados de desempenho: performance.xlsx
Referência
- Estruturas de dados sem bloqueio | Dr Dobb's
- Mais uma implementação de uma fila de array circular sem bloqueio | CódigoProjeto
- Sem bloqueio 编程 | 匠心十年 - 博客园
- 无锁队列的实现 | 酷 壳 - CoolShell
- Implementando Variáveis de Condição com Semáforos
使用共享内存的跨平台(Linux/Windows,x86/x64/ARM)高性能IPC通讯库
- 推荐支持C++17的编译器(msvc-2017/gcc-7/clang-4)
- 除STL外,无其他依赖
- 无锁(lock-free)或轻量级spin-lock
- 底层数据结构为循环数组(matriz circular)
-
ipc::route
支持单写多读, ipc::channel
支持多写多读【注意:目前同一条通道最多支持32个receiver,sender无限制】 - 默认采用广播模式收发数据,支持用户任意选择读写方案
- 不会长时间忙等(重试一定次数后会使用信号量进行等待),支持超时
- 支持Vcpkg方式安装,如
vcpkg install cpp-ipc
使用方法
Tradução: Wiki
性能
环境 | 值 |
---|
设备 | Versão ThinkPad T450 |
CPU | Versão® Core™ i5-4300U a 2,5 GHz |
内存 | 16 GB |
操作系统 | Windows 7 final x64 |
编译器 | MSVC 2017 15.9.4 |
单元测试和Benchmark测试: teste
Nome da versão: performance.xlsx
参考
- Estruturas de dados sem bloqueio | Dr Dobb's
- Mais uma implementação de uma fila de array circular sem bloqueio | CódigoProjeto
- Sem bloqueio 编程 | 匠心十年 - 博客园
- 无锁队列的实现 | 酷 壳 - CoolShell
- Implementando Variáveis de Condição com Semáforos