GPT提問:Node.js 平行運用技巧

Node.js 平行運用的核心做法

Node.js 本身是 單執行緒(Single Thread),但它可以透過下列工具達到「平行處理」:

✅ 1. 使用 Promise.all() 做多任務並行(最常用)

如果你的任務是「非阻塞 I/O」(例如查資料庫、讀檔案、API 呼叫)
→ 這種最適合用 Promise.all() 做平行運行。

✨範例:
async function runTasks() {
  const task1 = fetch("https://api1.com/data");
  const task2 = fetch("https://api2.com/data");
  const task3 = fetch("https://api3.com/data");

  // 3 個任務同時開始,等全部完成
  const results = await Promise.all([task1, task2, task3]);
  console.log(results);
}

runTasks();


👉 適用:API 讀取、DB 查詢、檔案讀取、非同步處理

✅ 2. 使用 Worker Threads 做 CPU 密集運算

如果你有「大量計算」
例如:

大量資料計算

圖片壓縮

JSON 大量處理

這種會讓 Node.js 卡住 → 要用 Worker Threads 來平行處理。

✨範例(簡易 CPU 平行處理):

main.js

const { Worker } = require('worker_threads');

function runWorker() {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./worker.js');
    worker.on('message', resolve);
    worker.on('error', reject);
  });
}

runWorker().then(result => console.log(result));


worker.js

let total = 0;
for (let i = 0; i < 1_000_000_000; i++) total++;

postMessage(total);


👉 適用:大量 CPU 計算,避免主線程卡死

✅ 3. 使用 cluster 模組做多核心利用(多進程)

Node.js 跑在單核心,但 cluster 可以讓你啟用多核心 CPU。

✨範例:
const cluster = require('cluster');
const http = require('http');

if (cluster.isPrimary) {
  const cpuCount = require('os').cpus().length;

  console.log(`啟動 ${cpuCount} 個 Worker`);

  for (let i = 0; i < cpuCount; i++) {
    cluster.fork();
  }
} else {
  http.createServer((req, res) => {
    res.end("Hello from worker!");
  }).listen(3000);
}


👉 適用:網站大量流量、高併發 API 伺服器

✅ 4. 使用 child_process 讓不同腳本平行跑

可以用來執行外部程式,例如:

Python 腳本

Shell 指令

分離式計算

✨範例:
const { exec } = require('child_process');

exec('python3 script.py', (err, stdout) => {
  console.log(stdout);
});

📌 結論(不讓你混亂版)
類型	推薦方式
多 API、DB 查詢	Promise.all()
頁面計算卡住、CPU 高負載	Worker Threads
伺服器多核心負載	cluster
呼叫外部程式	child_process
⬅ 返回上一頁