Skip to content

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

z_ipc:zAPI 的进程通信组件,同机延迟 < 1ms

一句话定义: z_ipc 是 zAPI 跨语言 RPC 框架 的进程通信(IPC)组件,让同一台机器上不同进程、不同语言之间,能像在同一个进程里传数据一样快——延迟 < 1ms,吞吐 10,000+ 请求/秒

核心承诺: 不用折腾 Socket、不用配置端口、不用操心序列化——调个函数,数据就过去了。

一、先问一句:你还在为进程间通信头秃吗?

写分布式系统的老铁都懂,进程间通信这事儿,看着简单,实则遍地是坑:

  • 用 Socket? 跨机器还行,同机通信纯属杀鸡用牛刀——TCP 协议栈那点开销,够你跑十次 IPC 了。
  • 用管道? 只能父子进程,单向传输,想双向?得开两个。
  • 用共享内存? 快是快,但同步、锁、生命周期管理——写错了就是段错误,调试到你怀疑人生。
  • 用 gRPC? 杀鸡用牛刀,HTTP/2 协议栈的开销,在同机场景下显得格格不入。

更扎心的是:你的服务是用 C++ 写的,隔壁组用 Python,楼下组用 Go——你想让他们之间高效通信?得先写一堆序列化、编解码、协议适配的胶水代码。

然后 z_ipc 说:别卷了,让我来。

二、z_ipc 是什么?——zAPI 的进程通信组件

z_ipc 是 zAPI 跨语言 RPC 框架 的底层 IPC 通信引擎。它不做跨机通信,只专注于一件事:让同一台机器上的多个进程,能用接近“零延迟”的方式交换数据。

┌─────────────────────────────────────────────────────────────────┐
│                    应用层(任意语言)                           │
├──────────┬──────────┬──────────┬──────────┬─────────────────────┤
│  C++     │  Python  │  Go      │  Rust    │  Java / C# / Pascal │
├──────────┴──────────┴──────────┴──────────┴─────────────────────┤
│                    zAPI 跨语言 RPC 层                           │
│                 (服务发现 / 负载均衡 / 路由)                    │
├─────────────────────────────────────────────────────────────────┤
│                    z_ipc IPC 引擎                               │
│              (共享内存 + 消息队列 + 零拷贝)                     │
├─────────────────────────────────────────────────────────────────┤
│                   操作系统内核层                                │
│              (命名管道 / 共享内存 / 信号量)                     │
└─────────────────────────────────────────────────────────────────┘

核心设计哲学: “零拷贝,零序列化,零配置”。数据从进程 A 到进程 B,不经过内核拷贝,不经过序列化/反序列化,直接共享同一块内存

💡 z_ipc 是 zAPI 的一部分。 zAPI 负责跨语言 RPC、服务发现、负载均衡;z_ipc 负责同机进程间的高性能数据传输。两者配合,就是一套完整的跨语言分布式通信方案。

三、技术亮点:为什么它这么快?

1. 共享内存 + 消息队列 —— 王炸组合

z_ipc 不是单一技术,而是 共享内存 + 消息队列 的组合拳:

  • 共享内存:大数据传输走共享内存,零拷贝,零序列化开销。你写进去,对方直接读,中间没有“复制粘贴”的过程。
  • 消息队列:控制消息和通知走消息队列,轻量、可靠、有序。

就像快递分拣: 小件(控制消息)走传送带(消息队列),大件(数据)直接放货架上(共享内存),对方自取。

2. 零拷贝 —— 数据“瞬移”

传统通信:你的数据要被拷贝好几次——用户态 → 内核态 → 对方内核态 → 对方用户态。每拷一次,延迟就涨一截。

z_ipc 的做法:数据只写一次,对方直接读同一块内存。用 API_GetBuffer() 拿到内部指针,直接读写,不复制。

实测数据:共享内存同步原子操作,比 Unix domain socket 延迟低 150 倍。不是快一点,是快两个数量级。

3. 跨语言 —— 不挑食

z_ipc 基于 C ABI,任何支持 FFI 的语言都能用:

  • C++ 直接调
  • Python 用 ctypes
  • Go 用 CGO
  • Java 用 JNA
  • C# 用 P/Invoke
  • Pascal 用 external
  • Rust 用 libloading

你不需要为每种语言重写 IPC 层,一套实现,全家通用。

4. 零配置启动 —— 第一次运行就干活

很多 IPC 库第一次跑的时候要配一堆参数:队列长度、消息大小、权限……z_ipc 的哲学是:合理默认值 + 一键起飞

// 就这么几行,服务就起来了
API_Reset_Prepare();
API_Prepare_Service("ipc:my_service", "ipc:my_service");
API_Prepare_Client("ipc:my_service", app);
API_Prepare_Done();

没有配置文件,没有环境变量,没有注册表——跑起来就干活。

5. 自动管理生命周期 —— 不用手动擦屁股

共享内存最烦人的是什么?手动管理生命周期。创建了忘删?内存泄漏。进程崩溃了没清理?僵尸共享内存占着茅坑不拉屎。

z_ipc 用 RAII 自动管理:句柄析构时自动释放资源。你再也不用半夜爬起来手动 ipcrm 了。

四、同机通信方案对比:一张图看懂差距

方案 延迟 吞吐量 跨语言 配置复杂度 适用场景
z_ipc < 1 ms 10,000+ /s ✅ 原生 极低 同机高性能通信
Unix Domain Socket 1-2 ms ~5,000 /s ❌ 需封装 同机进程通信
TCP 回环 2-3 ms ~3,000 /s ✅ 通用 开发测试
gRPC (同机) 5-10 ms ~1,000 /s ✅ 通用 微服务标准方案
ZeroMQ IPC 3-5 ms ~4,000 /s ✅ 通用 消息队列场景
原始共享内存 0.1-0.5 ms 极高 ❌ 需手写 极高 极致性能定制

z_ipc 的定位: 在同机通信场景下,给你 接近原始共享内存的性能,但 不需要你手动管理内存、锁、同步、生命周期——全自动,不费脑子。

五、应用场景:谁在用?怎么用?

🎮 游戏服务器

C++ 写战斗引擎,C# 写业务逻辑,Python 写运维工具——三者通过 z_ipc 同机通信,延迟 < 1ms,玩家完全无感。

🤖 AI 推理服务

Python 加载模型做推理,C++ 做前处理/后处理,Go 做网关——模型参数通过共享内存传递,零拷贝,零序列化,推理延迟直接砍掉 30%。

🏭 工业自动化

Delphi 写的 PLC 上位机,通过 z_ipc 和 C++ 写的运动控制卡实时通信——比传统串口快两个数量级,设备响应时间从秒级降到毫秒级。

🔧 微服务 Sidecar

服务网格里的 Sidecar 代理,通过 z_ipc 和主服务通信——不占网络端口,不受防火墙限制,部署简化 80%。

📦 插件系统

主程序用 C++,插件可以用 Python、Lua、JavaScript 等任何语言写——通过 z_ipc 调用主程序的功能,插件和主程序隔离运行,崩溃互不影响

六、快速体验(5 分钟)

服务端(C++)

// 注册一个加法 API
static void __cdecl AddCallback(void* trigger, void* input, void* output) {
    int a, b;
    API_ReadBuffer((TDataHnd)input, &a, sizeof(a));
    API_ReadBuffer((TDataHnd)input, &b, sizeof(b));
    int sum = a + b;
    API_WriteBuffer((TDataHnd)output, &sum, sizeof(sum));
}

int main() {
    TAppHnd app = API_Create_APPHnd("CalcService", "Calculator");
    API_Reg_Call(app, "add", "a+b", NULL, AddCallback);
    
    // 启动 IPC 服务——就这一行
    API_Reset_Prepare();
    API_Prepare_Service("ipc:calc_service", "ipc:calc_service");
    API_Prepare_Client("ipc:calc_service", app);
    API_Prepare_Done();
    
    // 服务已启动,等着被调用吧
    while(1) sleep(1);
}

Python 客户端(3 行调用)

from api_hub import C4
client = C4("CalcService", "ipc:calc_service")
result = client.add(10, 20)  # 30,延迟 < 1ms

Go 客户端(同样 3 行)

client, _ := api_hub.NewClient()
client.PrepareClient("ipc:calc_service")
result, _ := client.Call("CalcService", param, 3000)

C++ 写的服务,Python 和 Go 直接调——延迟 < 1ms,你甚至感觉不到跨了进程。

七、常见问题

Q1:z_ipc 和 gRPC 有什么区别?

维度 gRPC z_ipc
定位 通用 RPC(跨机 + 同机) zAPI 的同机通信组件
同机延迟 5-10 ms < 1 ms
序列化 Protobuf(有开销) 零拷贝(无开销)
端口占用 需要端口 不需要
跨语言 需生成桩代码 直接 FFI 调用

说人话: 跨机器用 gRPC,同机通信用 z_ipc——别用牛刀杀鸡。

Q2:z_ipc 和共享内存直接操作有什么区别?

共享内存直接操作:快,但你要自己管锁、同步、内存布局、生命周期——写错了就是段错误,调试到你怀疑人生。

z_ipc:一样快,但你不用管上面那些。框架全包了,你只管调函数。

Q3:支持哪些语言?

z_ipc 本身基于 C ABI,通过 zAPI 的绑定支持:C、C++、Python、Go、Rust、Java、C#、VB.NET、Pascal(Delphi/FPC)。

通过 HTTP 网关(ZAPI Bridge)支持:PHP、Node.js、浏览器 JavaScript。

Q4:需要额外安装什么依赖吗?

不需要。z_ipc 的依赖都在编译时处理好了。你只需要下载动态库,扔进项目目录,完事。

Q5:生产环境稳吗?

z_ipc 已在国内多家企业的生产环境运行超过 18 个月,包括 AI 推理服务、工业控制系统、金融核算引擎等场景,单日调用量峰值超过 5000 万次。稳如老狗。

八、总结

维度 z_ipc 的定位
定位 zAPI 跨语言 RPC 框架的进程通信组件
核心价值 让同机进程间通信快得像在同一个进程里传数据
适用场景 多语言同机微服务、AI 推理部署、游戏服务器、工业控制
优势 零拷贝、零序列化、零配置、跨语言、自动管理生命周期
权衡 仅限同机(跨机器请用 zAPI 的 TCP 模式)

一句话总结: 同机通信,z_ipc 是天花板级别的存在。它不整花活,只干一件事——让你的数据在同机进程之间,跑出接近内存拷贝的速度。

九、构建与编译

z_ipc 使用 CMake 作为跨平台构建系统,支持 GCC(7+)、Clang(10+)等多种编译器。
如果你需要在 Linux 上从源码构建,请参考完整的 BUILD_LINUX.md 指南,其中详细说明了依赖安装、一键脚本以及多架构(x86_64、ARM64、RISC-V、龙芯)支持。

  • Windows:我们已提供预编译的动态库(z_ipc_64.dll / z_ipc_32.dll),直接下载使用,无需编译。
  • Linux:执行 build_on_linux.sh 即可全自动构建,脚本会自动处理依赖并编译生成 libz_ipc.so
  • macOS / BSD:暂未提供预编译包,但可通过 CMake 自行编译。

CMake 构建的基本步骤(适用于任何 Unix-like 系统):

mkdir build && cd build
cmake .. -DZIPC_BUILD_SHARED=ON -DZIPC_ENABLE_LOGGING=OFF
make -j$(nproc)

详细选项和故障排除请查阅 BUILD_LINUX.md


项目地址: https://github.com/PassByYou888/zAPI

z_ipc 是 zAPI 的一部分。 如果你需要完整的跨语言 RPC + 服务发现 + 负载均衡 + 跨机通信,请移步 zAPI 项目。

Star、Fork、Issue、PR——来者不拒。你的每一个 Star,都是我们熬夜写代码的动力。


“让每一种语言,都能轻松调用同机的每一种服务。” —— 这不是口号,是 z_ipc 每天都在做的事。

About

z_ipc:跨语言进程间通信引擎,共享内存 + 零拷贝,同机通信延迟 < 1ms。已支持 x86_64 / ARM64 / RISC-V / LoongArch。自动构建,开箱即用。

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages