当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js Worker用法及代码示例


类:Worker

添加于:v10.5.0

Worker 类代表一个独立的 JavaScript 执行线程。大多数 Node.js API 都在其中可用。

Worker 环境中的显著差异是:

在其他 Worker 中创建 Worker 实例是可能的。

就像网络工作者node:cluster 模块,可以通过inter-thread消息传递实现双向通信。在内部,一个Worker有一对内置的MessagePorts 已经相互关联,当Worker被建造。虽然MessagePort父端的对象不是直接暴露的,它的函数是通过暴露的worker.postMessage()worker.on('message')上的事件Worker父线程的对象。

要创建自定义消息传递通道(鼓励使用默认全局通道,因为它有助于分离关注点),用户可以在任一线程上创建一个 MessageChannel 对象并将该 MessageChannel 上的一个 MessagePort 传递给其他线程通过预先存在的通道,例如全局通道。

有关如何传递消息以及可以通过线程屏障成功传输哪种 JavaScript 值的更多信息,请参阅 port.postMessage()

const assert = require('node:assert');
const {
  Worker, MessageChannel, MessagePort, isMainThread, parentPort
} = require('node:worker_threads');
if (isMainThread) {
  const worker = new Worker(__filename);
  const subChannel = new MessageChannel();
  worker.postMessage({ hereIsYourPort: subChannel.port1 }, [subChannel.port1]);
  subChannel.port2.on('message', (value) => {
    console.log('received:', value);
  });
} else {
  parentPort.once('message', (value) => {
    assert(value.hereIsYourPort instanceof MessagePort);
    value.hereIsYourPort.postMessage('the worker is sending this');
    value.hereIsYourPort.close();
  });
}

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 Worker。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。