const cluster = require('node:cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isPrimary) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.end('Hello from worker');
}).listen(8000);
}
const { spawn } = require('node:child_process');
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
Характеристика | cluster | child_process |
---|---|---|
Цель использования | Масштабирование сервера | Запуск внешних процессов |
Общий порт | Да | Нет |
Процесс | Копии одного приложения | Любые разные процессы |
Сложность управления | Проще (автоматический балансир) | Сложнее (ручное управление) |
Статическая нагрузка: Если воркеры получают неравномерную нагрузку (например, долгие синхронные задачи)
Проблемы с памятью:
Ограничения IPC:
// При интенсивном обмене сообщениями
process.send({ huge: Buffer.alloc(1024 * 1024) }); // 1MB
Блокировка цикла событий:
Ограничения ОС:
Проблемы с состоянием:
let sessions = {}; // Общее состояние для всех запросов