Mizu:Python与R的零拷贝并行新解
Mizu – zero-copy parallel R and Python over shared memory
Python 的 GIL 长期限制了 CPU 密集型任务的并行效率,而传统的多进程方案又面临高昂的通信开销。Mizu 项目通过基于共享内存的无锁 IPC 技术,将任务往返延迟从微秒级压缩至亚微秒级,实现了线程级的并发速度。它支持 Python 与 R 之间的零拷贝数据共享,让 numpy 数组、Arrow 表等数据结构无需序列化即可在语言间直接传递。无论是替代 concurrent.futures,还是构建嵌套并行任务,Mizu 都能以极低的延迟提供原生般的性能体验,为数据科学工作流带来了真正的突破。
任务往返时间从套接字通信的约 100 微秒降至 1 微秒以下,让你能像使用线程一样精细地划分工作负载。
HN 评论区
11- stdbrouw
太棒了。我记得去年得知 mirai 无法提供对内存中 arrow 表的共享访问时,感到相当失望。R 中的多核处理在起作用时很棒,但往往没过多久,不必要且无用的数据拷贝就会彻底毁掉性能。
- shikokuchuo
作者在此:我编写了 mizu(R 版)和 pymizu(Python 版),这两个包基于同一个 C 核心 libmizu,提供基于共享内存的无锁异步和并行计算。上面的链接是 Python 包的。
任务往返时间降至一微秒以下,而使用 Python 的 ProcessPoolExecutor 或 mirai(我的另一个 R 框架)通过套接字通信时约为 100 微秒。这些数字来自我的笔记本电脑(M4 Pro),基准测试脚本就在仓库中,大家可以自行运行。
工作线程从无锁队列中领取任务,没有任务分发器,且热点路径上避免了系统调用。
`PoolExecutor` 是一个即插即用的 `concurrent.futures.Executor`,任务可在 asyncio 中等待,NumPy 数组、polars、pyarrow 和 pandas 数据框均以零拷贝视图形式传递。由于 mizu 和 pymizu 共享相同的线格式,数据框和 Arrow 类型也能在不同语言的工作线程池之间实现零拷贝传递。
当然,由于使用了共享内存,这仅限于单机。API 仍处于实验阶段。非常欢迎在仓库中提供易用性反馈和错误报告。我很想听听大家希望在哪里使用这项技术。
包含完整基准测试和 R/Python 代码示例的博文:https://opensource.posit.co/blog/2026-11-05_mizu-0-1-0/