类: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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。