# nodejs-worker_threads **Repository Path**: coder_1024/nodejs-worker_threads ## Basic Information - **Project Name**: nodejs-worker_threads - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-11 - **Last Updated**: 2026-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Node.js Worker Threads 示例 使用 `worker_threads` 在 Node 24 环境下,用 TypeScript 编写的多线程示例。 Worker 线程通过 ESM `import` 引用外部模块中的函数。 ## 项目结构 ``` src/ ├── main.ts # 主线程入口:创建 Worker、分发任务、收集结果 ├── worker.ts # Worker 子线程:接收数据、import 外部函数、执行计算、返回结果 └── utils.ts # 外部工具模块:fibonacci 计算函数、结果格式化函数 ``` ## 执行流程 整个程序的运行过程如下: ``` ┌─────────────────────────────────────────────────────────┐ │ main.ts(主线程) │ │ │ │ 1. 定义任务列表 tasks(4 个任务) │ │ 2. 对每个任务调用 runWorker() │ │ ├─ 创建 new Worker("worker.ts", { workerData }) │ │ ├─ 通过 workerData 把 { taskId, n } 传给子线程 │ │ └─ 返回 Promise,等待子线程消息 │ │ 3. Promise.all() 并行等待所有 Worker 完成 │ │ 4. 打印所有结果 │ └────────────┬──────────┬──────────┬──────────┬────────────┘ │ │ │ │ 创建Worker 创建Worker 创建Worker 创建Worker │ │ │ │ ▼ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ worker.ts #1 │ │ worker.ts #2 │ │ worker.ts #3 │ │ worker.ts #4 │ │ │ │ │ │ │ │ │ │ 1.从workerData│ │ 1.从workerData│ │ 1.从workerData│ │ 1.从workerData│ │ 取出参数 │ │ 取出参数 │ │ 取出参数 │ │ 取出参数 │ │ 2.import并调用│ │ 2.import并调用│ │ 2.import并调用│ │ 2.import并调用│ │ fibonacci()│ │ fibonacci()│ │ fibonacci()│ │ fibonacci()│ │ 3.parentPort │ │ 3.parentPort │ │ 3.parentPort │ │ 3.parentPort │ │ 发送结果 │ │ 发送结果 │ │ 发送结果 │ │ 发送结果 │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ └───── 结果通过 message 事件返回主线程 ──────────────┘ ``` ### 关键通信机制 | 方向 | 方式 | 说明 | |------|------|------| | 主线程 → 子线程 | `workerData` | 创建 Worker 时传入,子线程通过 `workerData` 读取 | | 子线程 → 主线程 | `parentPort.postMessage()` | 子线程发送,主线程通过 `worker.on("message")` 接收 | ## 运行 ```bash # 安装类型定义 npm install # 运行(Node 24 原生支持 TS) npm start ``` 输出: ``` 主线程: 启动 4 个 worker 线程... [Task#1] fibonacci(10) = 55 [Task#2] fibonacci(20) = 6765 [Task#3] fibonacci(40) = 102334155 [Task#4] fibonacci(45) = 1134903170 主线程: 所有 worker 执行完毕 ``` ## 要点 - **Node 24 原生运行 TS**:使用 `--experimental-strip-types`,无需 `tsc` 编译,直接运行 `.ts` 文件 - **Worker 中使用 import**:`worker.ts` 通过 ESM `import` 引入 `utils.ts` 的外部函数,证明子线程可以正常使用模块系统 - **ESM 模式**:`package.json` 中 `"type": "module"` 启用 ES Modules - **并行计算**:4 个 Worker 同时运行,通过 `Promise.all` 等待全部完成