面试题答案
一键面试创建简单工作线程
在 Node.js 中,可以使用 worker_threads
模块来创建工作线程。以下是一个简单示例:
- 主文件(例如
main.js
):
const { Worker } = require('worker_threads');
// 创建一个新的工作线程
const worker = new Worker(__dirname + '/worker.js');
worker.on('message', (message) => {
console.log('从子工作线程接收到消息:', message);
});
worker.postMessage('你好,子工作线程');
- 子工作线程文件(
worker.js
):
const { parentPort } = require('worker_threads');
parentPort.on('message', (message) => {
console.log('从主工作线程接收到消息:', message);
parentPort.postMessage('你好,主工作线程');
});
主工作线程和子工作线程之间通信
- 主工作线程向子工作线程发送消息:
- 使用
worker.postMessage(data)
方法,data
可以是任何可结构化克隆的数据,如字符串、对象、数组等。例如在上述main.js
中worker.postMessage('你好,子工作线程');
- 使用
- 子工作线程向主工作线程发送消息:
- 在子工作线程中,通过
parentPort.postMessage(data)
发送消息,parentPort
代表与主工作线程通信的端口。例如在worker.js
中parentPort.postMessage('你好,主工作线程');
- 在子工作线程中,通过
- 接收消息:
- 主工作线程:通过监听
worker
的message
事件来接收子工作线程发送的消息,如worker.on('message', (message) => { /* 处理消息 */ });
- 子工作线程:通过监听
parentPort
的message
事件来接收主工作线程发送的消息,如parentPort.on('message', (message) => { /* 处理消息 */ });
。
- 主工作线程:通过监听