一个基于 Node.JS Worker Thread 的类 Go routine 实现(Nodejs相关)

发布于 1周前 作者 songsunli 来自 nodejs/Nestjs

一个基于 Node.JS Worker Thread 的类 Go routine 实现(Nodejs相关)

项目地址:node-routine

由于 Worker Thread 的限制,node-routine 仅推荐对于 routine 间共享数据不大的场景使用。

架构:


1 回复

在 Node.js 中,实现类似 Go routine 的并发机制,可以使用 Worker Threads 模块来创建多线程执行环境。这允许你在不同的线程中运行 JavaScript 代码,从而充分利用多核 CPU。以下是一个简单的基于 Node.js Worker Threads 的类 Go routine 实现示例:

首先,确保你安装了 Node.js,并创建一个新的项目目录。

  1. 创建一个 worker.js 文件,用于定义 Worker 线程中要执行的代码:
const { parentPort } = require('worker_threads');

parentPort.on('message', (data) => {
  // 模拟耗时任务
  setTimeout(() => {
    parentPort.postMessage(`Result: ${data * 2}`);
  }, 1000);
});
  1. 在主文件中(例如 main.js),创建并管理 Worker 线程:
const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
  const worker = new Worker('./worker.js');

  worker.on('message', (message) => {
    console.log(message);
  });

  worker.postMessage(5); // 发送数据给 Worker 线程
} else {
  // 这部分代码在 Worker 线程中执行,已在 worker.js 中定义
}
  1. 运行 main.js 文件:
node main.js

输出将会是:

Result: 10

这个示例展示了如何在 Node.js 中使用 Worker Threads 实现简单的并发处理,模拟了 Go routine 的功能。你可以根据需要扩展此示例来处理更复杂的任务。

回到顶部