#66071·Node.js

工人线条:关于长期工人运行时间和发货箱的建议

作者: FelipeMiiller创建于 2026年9月16日更新于 2026年9月17日
标签feature request

这个功能能解决什么问题?

Node.js的单线事件循环在同步非屏蔽 I/O 上表现优异。 然而,同步的 CPU 捆绑操作(cryptography, AST/JSON 剖析,图像操作,模板渲染,ML嵌入) 将主事件循环冻结,从而导致延时标记和请求超时.

目前,开发者在试图卸载工作时面临若干限制:

  1. ** 人工 " 新工人() " 每项任务** 引起高内存分配和V8 隔离靴子延后(每任务~20ms)。
  2. ** 现有的使用地工人集体**(piscina',workerpool')严格地将工人的线条视为一次性的、无国籍的功能跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跳跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑
  3. ** 正在处理的背景任务和副作用**(例如交易出箱模式:向 DB 写入后发送电子邮件或webhook)没有标准的核心抽象. 开发者要么在主线上做天真起火和遗忘(在模板编译过程中冒着事件循环被屏蔽的风险,以及未处理的承诺崩溃),要么为了简单的进程背景工作,被迫添加像Redis + BullMQ / RabbitMQ这样的外部基础设施.

在我们的经验基准中,在主线上同步执行CPU任务将事件循环冻结了2,207 ms,在计算过程中完全饿死进取的I/O.

你为解决问题而提出的特征是什么?

我们提议在Node.js(作为Node:worker runtime'或Node:worker threads'下的增强)中增加一个内置的持续工作员运行时间,在核心轴上运行:

**"事件循环坐标. 坚持不懈的工人被处决。” **

  • 核心能力:
  1. ** 双重执行模式:**
  • `运行时间.执行(任务)': 交互请求响应模式. 卸载计算结果,等待结果接近零事件循环(基准为~6.5ms).
  • 运行时间.发送任务': 交易出柜/起火和确认模式的背景发送模式。 立即返回未锁定的“任务手提”,允许在暴露.oncomplete(cb)'和`.onError(cb)'以同步确认的同时进行次毫秒HTTP响应。
  1. ** " 货币批量执行 " :**
  • 本地`保证.所有'语义,但严格限于工人池的硬件容量(例如,4名工人平行地处理40项任务,而不使用CPU抽打)。
  1. ** 具有持久性L1高回忆力的国家工人:**
  • 专职工人可保留温暖的记忆堆(caches, loaded models,编译的WASM模块),跨工作与工人亲和。 基准显示,与无国籍人员重新装入相比,有33.2x耐用速度 (1.58ms vs 52.37ms).
  1. 诊断和后压结合:
  • 原生 " 合成资源 " (`Node:async-hooks')传播,以保存取自OpenTeleometry/APM的分布式跟踪上下文。
  • 无阻排队后压和超时(`任务排出时间Error'),以防止处理 OOM。
  • 自动坠机的主管 . . . . . . .