當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。