Node.js 工作线程
Node.js 中的工作线程对于执行繁重的 JavaScript 任务很有用。在线程的帮助下,Worker 可以轻松地并行运行 javascript 代码,从而使其更快、更高效。我们可以在不干扰主线程的情况下完成繁重的任务。旧版本的 Node.js 中没有引入工作线程。因此,首先更新您的 Node.js 以开始使用。
现在创建两个文件来实现线程,如下所示:
文件名:worker.js
const { workerData, parentPort }
= require('worker_threads')
console.log('Technical Articles on '
+ workerData);
parentPort.postMessage(
{ fileName: workerData, status: 'Done' })
这里, workerData和parentPort是 Worker Thread 的一部分。 workerData 用于从线程中获取数据,而 parentPort 用于操作线程。 postMessage()方法用于通过获取workerData 获取的文件名在控制台中发布给定消息。
文件名:index.js
const { Worker } = require('worker_threads')
function runService(workerData) {
return new Promise((resolve, reject) => {
const worker = new Worker(
'./worker.js', { workerData });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0)
reject(new Error(
`Stopped the Worker Thread with the exit code: ${code}`));
})
})
}
async function run() {
const result = await runService('GeeksForGeeks')
console.log(result);
}
run().catch(err => console.error(err))
这里,函数runService()返回一个 Promise 并运行工作线程。函数run()用于调用函数runService()并为workerData 赋值。
运行此应用程序的步骤:运行以下命令:
node index.js
上述以下命令的输出如下所示:
Technical Articles on GeeksForGeeks
{ fileName: 'GeeksForGeeks', status: 'Done' }
结论:使用工作线程,我们可以在不产生死锁情况的情况下实现更高效的应用程序。这就是您可以在应用程序中导入工作线程并实现该线程的方式。