Node.js 多线程一直有个绕不开的坎:postMessage 靠结构化克隆传数据,对象越大,内存越容易失控。Vercel Labs 的 Chris Tate 推出的 @scriptc/threads,想直接把这个环节拿掉。
它的做法是让发送端和所有 Worker 读取同一份底层数据结构,而不是各存一份副本。数据通过 publish() 函数以不可变图的形式共享,实现引用级零拷贝,序列化开销被彻底消除。
![]()
8个Worker的实测数字
在 8 个 Worker 协同处理的基准测试中,峰值内存从 3102 MB 降到 611 MB,缩减幅度超过 80%。这个数字对应的正是结构化克隆最吃力的场景:多线程同时持有大对象。
工具基于 scriptc 编译,API 贴合原生调用习惯,不需要开发者重新学习一套多线程模型。对已经在用 Worker 的项目来说,迁移成本被压得很低。
兼容性上的退路
@scriptc/threads 兼容原生 Worker API,并带有自动回退机制。在标准 Node.js 环境下,如果条件不满足,它会平滑回退到常规克隆方式,不会让代码直接跑不起来。
这一点对生产环境很关键:零拷贝是加速项,不是必须项。开发者可以先接入,再根据运行环境决定是否真正吃到那 80% 的内存收益。
Node.js 多线程的内存瓶颈存在已久,@scriptc/threads 给出的答案是把共享做成不可变图。8 个 Worker 的测试数据说明,这条路至少在大对象场景下是走得通的。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.