[开源上新] 基于Share Memory的IPC : https://github.com/missionlove/SMIPC

SMIPC

A light IPC DLL based on share memory.

github地址:
https://github.com/missionlove/SMIPC

SMIPC 是一个基于 Windows 共享内存(Shared Memory)的轻量级 IPC 库,面向低延迟、高吞吐的本机进程通信场景。

项目核心逻辑

SMIPC 的核心是"数据区 + 事件队列"的双层设计:

  • 数据区(Buffer):使用共享内存存放 payload。
  • 事件队列(IO Event Queue) :仅传递事件元数据(event_codeevent_iduser_tagbuffer_ref)。
  • 同步原语:通过互斥量和信号量实现并发安全与阻塞唤醒。
  • 业务状态位working_flag 由业务方维护,表达"是否仍有待处理工作"。

典型流程(进阶模式):

  1. smipc_buffer_write 写入 payload,得到 buffer_ref
  2. smipc_event_push 推送事件(携带 buffer_ref
  3. 接收方 smipc_event_popsmipc_buffer_read 取数据

此外也提供简化模式:smipc_send / smipc_receive,用于快速接入。

项目目标

  • 提供一个简单、稳定、可嵌入的 Windows IPC DLL。
  • 支持请求-响应、批量消息、优雅关闭等常见业务模式。
  • 在保证接口清晰的前提下,提供较好的延迟和吞吐表现。

项目优点

  • 低开销:数据在本机共享内存中流转,避免额外序列化/网络栈开销。
  • 接口分层清晰:既有简化 API,也有可控度更高的事件+缓冲区 API。
  • 扩展性好:支持批量 push/pop、多线程、可选 TCP 同步通知。
  • 工程可落地 :仓库内包含 ServerDemoClientUITestsBenchmark 示例与验证代码。

性能数据(本地压测)

压测程序:x64/Release/SMIPC.Benchmark.exe

测试命令(本次数据来源):

  • SMIPC.Benchmark.exe 50000 64 1 1
  • SMIPC.Benchmark.exe 50000 256 1 1
  • SMIPC.Benchmark.exe 50000 1024 1 1
  • SMIPC.Benchmark.exe 30000 64 8 1
  • SMIPC.Benchmark.exe 50000 64 1 4

说明:数据为单机实测结果,用于趋势参考;不同 CPU/负载/编译选项下数值会变化。

压测结果表

场景 参数(rounds,payload,batch,threads) QPS (msg/s) 吞吐 (MB/s) 平均延迟 (us/msg) P50 (us) P90 (us) P99 (us)
单线程小包 50000, 64B, 1, 1 89,358.9 10.91 11.19 10.6 12.4 18.8
单线程中包 50000, 256B, 1, 1 86,150.6 42.07 11.61 10.8 12.9 19.4
单线程大包 50000, 1024B, 1, 1 85,817.4 167.61 11.65 11.0 12.9 19.1
批处理模式 30000, 64B, 8, 1 191,637 23.39 5.22 40.8* 52.6* 61.3*
4线程并发 50000, 64B, 1, 4 252,629 30.84 3.96 14.2* 20.2* 31.1*

* 说明:批处理/多线程下,p50/p90/p99 的统计口径与单线程单条消息不同(Benchmark 程序会输出口径说明)。

QPS 图示(基于以上数据)

SMIPC Benchmark QPS 64B-1T 256B-1T 1024B-1T 64B-B8 64B-4T 260000 240000 220000 200000 180000 160000 140000 120000 100000 80000 60000 40000 20000 0 msg/s

1) 压测命令模板

powershell 复制代码
SMIPC.Benchmark.exe <rounds> <payload_bytes> [batch_size] [threads]

推荐至少覆盖以下场景:

  • 单线程:50000 64 1 1
  • 单线程:50000 256 1 1
  • 单线程:50000 1024 1 1
  • 批处理:30000 64 8 1
  • 多线程:50000 64 1 4

2) 测试环境信息模板

text 复制代码
[Hardware]
CPU Model      : <e.g. Intel Core i7-12700H / AMD Ryzen 7 7840H>
CPU Cores      : <physical/logical, e.g. 6P+8E / 20 threads>
CPU Frequency  : <base/turbo, and whether fixed frequency was used>
Memory         : <size + speed, e.g. 32GB DDR5-5600>
Storage        : <SSD model, optional>

[OS]
OS Version     : <e.g. Windows 10 22H2 build xxxx>
Background Load: <idle / moderate / heavy>

[Build]
Solution/Target: <e.g. SMIPC.sln / x64 Release>
Compiler        : <MSVC version>
Optimization    : </O2, LTCG on/off, debug symbols on/off>
Runtime Library : </MD or /MT>

[Power]
Power Mode      : <Best performance / Balanced / Power saver>
Power Plan      : <Windows power plan name>
Thermal State   : <normal / throttling observed>

[Benchmark Config]
Executable      : <path to SMIPC.Benchmark.exe>
Rounds/Payload  : <exact args>
Batch/Threads   : <exact args>
Run Count       : <e.g. 3 runs, take median>

文档

相关推荐
♛识尔如昼♛1 个月前
操作系统(4)第二章- 进程通信
操作系统·进程·ipc
_OP_CHEN2 个月前
【Linux系统编程】(三十三)System V 共享内存精讲:Linux 最快 IPC 的原理与实战精髓
linux·服务器·操作系统·共享内存·c/c++·ipc·system v
Andy Dennis2 个月前
进程通信方式介绍
进程通信·ipc
code monkey.2 个月前
【Linux之旅】Linux 进程间通信(IPC)全解析:从管道到共享内存,吃透进程协作核心
linux·c++·ipc
柏木乃一3 个月前
进程间通信IPC(1)IPC概述,匿名管道,进程池
linux·服务器·c++·进程间通信·ipc·匿名管道·进程池
好多渔鱼好多3 个月前
【IPC】 RTSP Server 如何实现推流
服务器·ipc·rtsp server·rtsp 推流实现
HalvmånEver3 个月前
Linux:命名管道实现IPC(进程间通信七)
linux·运维·服务器·ipc·命名管道·管道pipe
好多渔鱼好多3 个月前
【IPC】V4L2 数据结构详解
ipc·v4l2·video for linux·ipc摄像头
CQ_YM4 个月前
Linux管道通信
linux·c语言·管道·ipc·管道通信