在 Node.js
中,Worker
是一种用于执行并行任务的工具,特别适用于处理 CPU
密集型任务或需要在后台运行的任务,以避免阻塞主线程。
Node.js
提供了一个 worker_threads
模块来创建和管理这些工作线程。
1.Main Threads
js
const path = require('path')
const { Worker } = require('node:worker_threads')
const worker = new Worker(path.resolve(__dirname, './3.worker_threads.js'))
worker.on('message', (result) => {
console.log(`Main thread message: ${result}`)
worker.terminate().then(() => {
console.log('Main thread terminate')
}).catch((err) => {
console.error('Main thread failed to terminate', err);
})
})
worker.on('error', (error) => {
console.error(`Main thread error: ${error}`)
})
worker.on('exit', (code) => {
if (code !== 0) {
console.error(`Main thread exit: ${code}`)
}
})
worker.postMessage({ task: 'heavyComputation' })
2. Worker Threads
js
const { parentPort } = require('node:worker_threads')
parentPort.on('message', (data) => {
if (data.task === 'heavyComputation') {
const result = heavyComputation()
parentPort.postMessage(result)
}
})
function heavyComputation() {
let sum = 0
for (let i = 0; i < 1e9; i++) {
sum += i
}
return sum
}