我想在工作线程中运行阻塞任务以避免阻塞事件循环。我有两个环境,我的工作站和服务器。两者都有相同版本的 NodeJS (14.16.1)。
这是我的代码示例:
// main.js
const workerPath = __dirname + "/worker.js";
async function doBlockingAction(data) {
return new Promise((resolve, reject) => {
try {
const worker = new Worker(workerPath, {workerData: data});
worker.on("message", ({success, err}) => {
console.log("WORKER RESPONSE");
if (err) return reject(err);
return resolve(success);
});
worker.on("exit", code => {
console.log("WORKER EXIT", code);
});
} catch (err) {
reject(err);
}
});
}
// worker.js
const { parentPort, workerData } = require('worker_threads');
try {
// This method will block the event loop
blockingAction(workerData);
parentPort.postMessage({success: true, err: null});
} catch (err) {
parentPort.postMessage({success: false, err});
}
在我的工作站上,一切正常(我得到WORKER RESPONSE
了输出)。在服务器上,工作人员立即退出(我得到WORKER EXIT 0
)
这两个文件具有相同的权限。
什么可能导致这种行为?为什么工作线程会立即退出?