Node.js 多线程编程简介

52 阅读1分钟

Node.js 多线程编程简介

在 Node.js 中,多线程编程的主要方式是使用工作线程模块(Worker Threads module),它可以在 Node.js 进程中创建独立的 JavaScript 执行环境,每个执行环境都有自己的 V8 实例、内存堆栈和事件循环。

以下是使用worker线程模块进行多线程编程的简易步骤:

  1. 引入worker线程模块:
const { Worker } = require('worker_threads');
  1. 创建worker线程:
const worker = new Worker('./worker.js');
  1. 监听worker线程消息:
worker.on('message', (message) => {
  console.log(`Received message from worker: ${message}`);
});
  1. 发送消息到worker线程:
worker.postMessage('Hello from the main thread!');
  1. 在worker线程中处理消息:
const { parentPort } = require('worker_threads');
parentPort.on('message', (message) => {
  console.log(`Received message from main thread: ${message}`);
  parentPort.postMessage('Hello from the worker thread!');
});

上述代码中,worker.js 文件是一个独立的 JavaScript 执行环境,可以在其中编写独立的线程代码,而主线程(即调用 new Worker() 的线程)可以通过 worker.postMessage() 发送消息到工作线程,工作线程可以通过 parentPort.on('message') 监听消息,然后处理消息并通过 parentPort.postMessage() 发送回复消息到主线程。

需要注意的是,在 Node.js 中,由于 V8 的限制,不能在多个线程之间共享内存,因此如果需要在多个线程之间传递大量数据,可以使用 BufferSharedArrayBuffer 等方式进行数据传输。此外,需要注意控制线程数量,避免过度创建线程导致系统资源浪费。