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
⬅ 返回上一頁