new Worker(filename[, options])


  • filename <string> | <URL> Worker 主脚本或模块的路径。必须是绝对路径或相对路径(即相对于当前工作目录的路径),以 ./../ 开头,或使用 file:data: 协议的 WHATWG URL 对象。当使用 data: 网址 时,数据会根据 MIME 类型通过 ECMAScript 模块加载器 进行解析。如果 options.evaltrue,则这是一个包含 JavaScript 代码的字符串,而不是路径。
  • options <Object>
    • argv <any[]> 将会被转换为字符串并附加到工作线程中的 process.argv 的参数列表。这与 workerData 十分相似,但这些值可以在全局 process.argv 上访问,就好像它们作为 CLI 选项传递给脚本一样。
    • env <Object> 如果设置,指定 Worker 线程内部 process.env 的初始值。作为一个特殊值,可以使用 worker.SHARE_ENV 来指定父线程和子线程应共享它们的环境变量;在这种情况下,对一个线程的 process.env 对象所做的更改也会影响另一个线程。默认值: process.env
    • eval <boolean> 如果 true 且第一个参数是 string,则将构造函数的第一个参数解释为一段在工作线程上线后执行的脚本。
    • execArgv <string[]> 传递给工作线程的节点 CLI 选项列表。V8 选项(例如 --max-old-space-size)和影响进程的选项(例如 --title)不受支持。如果设置了,将在工作线程中作为 process.execArgv 提供。默认情况下,选项将从父线程继承。
    • stdin <boolean> 如果设置为 true,那么 worker.stdin 会提供一个可写流,其内容在 Worker 内显示为 process.stdin。默认情况下,不提供任何数据。
    • stdout <boolean> 如果设置为 true,那么 worker.stdout 不会自动传递到父级的 process.stdout
    • stderr <boolean> 如果设置为 true,那么 worker.stderr 不会自动传递到父级的 process.stderr
    • workerData <any> 任何被克隆并作为 require('node:worker_threads').workerData 提供的 JavaScript 值。克隆按照 HTML 结构化克隆算法 中描述的方式进行,如果对象无法被克隆(例如因为它包含 function)则会抛出错误。
    • trackUnmanagedFds <boolean> 如果设置为 true,那么 Worker 会跟踪通过 fs.open()fs.close() 管理的原始文件描述符,并在 Worker 退出时关闭它们,类似于通过 FileHandle API 管理的其他资源,如网络套接字或文件描述符。此选项会自动被所有嵌套的 Worker 继承。默认值: true
    • transferList <Object[]> 如果在 workerData 中传入一个或多个类似 MessagePort 的对象,则这些项目需要 transferList,否则将抛出 ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST。有关详细信息,请参见 port.postMessage()
    • resourceLimits <Object> 新 JS 引擎实例的可选资源限制集合。达到这些限制会导致 Worker 实例被终止。这些限制仅影响 JS 引擎,不会影响外部数据,包括不会影响 ArrayBuffer。即使设置了这些限制,如果遇到全局内存不足的情况,进程仍可能中止。
      • maxOldGenerationSizeMb <number> 主堆的最大大小,单位为 MB。如果设置了命令行参数 --max-old-space-size,将会覆盖此设置。
      • maxYoungGenerationSizeMb <number> 最近创建对象的堆空间最大大小。如果设置了命令行参数--max-semi-space-size,它将覆盖此设置。
      • codeRangeSizeMb <number> 用于生成代码的预分配内存范围的大小。
      • stackSizeMb <number> 线程的默认最大堆栈大小。较小的值可能导致 Worker 实例无法使用。默认值:4
    • name <string> 用于调试/识别的可选 name,将附加到工作线程标题上,使最终标题为 [worker ${id}] ${name}默认值: ''