📜  Node.js 工作线程

📅  最后修改于: 2022-05-13 01:56:55.315000             🧑  作者: Mango

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' })

这里, workerDataparentPort是 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' }

结论:使用工作线程,我们可以在不产生死锁情况的情况下实现更高效的应用程序。这就是您可以在应用程序中导入工作线程并实现该线程的方式。