Skip to content

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
}