類:Worker
添加於:v10.5.0
- 擴展: <EventEmitter>
Worker
類代表一個獨立的 JavaScript 執行線程。大多數 Node.js API 都在其中可用。
Worker 環境中的顯著差異是:
process.stdin
process.stdout
process.stderr
require('node:worker_threads').isMainThread
false
。require('node:worker_threads').parentPort
process.exit()
process.abort()
- 設置組或用戶 ID 的
process.chdir()
process
方法不可用。 process.env
worker.SHARE_ENV
env
選項傳遞給Worker
process.title
- 信號不通過
process.on('...')
- 由於調用
worker.terminate()
- 無法訪問來自父進程的 IPC 通道。
- 不支持
trace_events
- 本機 add-ons 隻能從多個線程加載,如果它們滿足 certain conditions 。
在其他 Worker
中創建 Worker
實例是可能的。
就像網絡工作者和node:cluster
模塊,可以通過inter-thread消息傳遞實現雙向通信。在內部,一個Worker
有一對內置的MessagePort
s 已經相互關聯,當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();
});
}
相關用法
- Node.js Worker.isMainThread用法及代碼示例
- Node.js Worker.exitedAfterDisconnect用法及代碼示例
- Node.js Worker.disconnect()用法及代碼示例
- Node.js Worker.send(message[, sendHandle[, options]][, callback])用法及代碼示例
- Node.js Worker.isDead()用法及代碼示例
- Node.js Writable Stream pipe事件用法及代碼示例
- Node.js WritableStream用法及代碼示例
- Node.js Writable Stream finish事件用法及代碼示例
- Node.js Writable Stream unpipe事件用法及代碼示例
- Node.js ServerHttp2Stream http2stream.pushStream(headers[, options], callback)用法及代碼示例
- Node.js http2.Http2ServerRequest request.url用法及代碼示例
- Node.js request.socket用法及代碼示例
- Node.js assert.notEqual(actual, expected[, message])用法及代碼示例
- Node.js tlsSocket.authorized用法及代碼示例
- Node.js zlib.deflateRaw()用法及代碼示例
- Node.js http.IncomingMessage message.rawHeaders用法及代碼示例
- Node.js Console用法及代碼示例
- Node.js GM transparent()用法及代碼示例
- Node.js URL.protocol用法及代碼示例
- Node.js http.Agent.reuseSocket(socket, request)用法及代碼示例
- Node.js fs.filehandle.datasync()用法及代碼示例
- Node.js socket.bind()用法及代碼示例
- Node.js v8.getHeapSpaceStatistics()用法及代碼示例
- Node.js http2session.destroyed用法及代碼示例
- Node.js http.ServerResponse response.statusCode用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 Worker。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。