Я работаю над версией 2.0 приложения, и для этой новой версии я работаю с многопоточностью, чтобы оптимизировать свою производительность. Я написал простой код, чтобы увидеть, как балансировка узлов между процессами. Вот код:
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
process.title = "xxxxx";
let count = {
1:0,
2:0,
3:0,
4:0
};
if (cluster.isMaster) {
console.clear()
console.log(`+ ${process.pid}`);
console.log(`|`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`|-- ${worker.process.pid} died`);
});
} else {
// Include Express
var express = require('express');
// Create a new Express application
var app = express();
// Add a basic route – index page
app.get('/', function (req, res) {
res.send("Process : " + process.pid + " Worker : " + cluster.worker.id);
count[cluster.worker.id] = count[cluster.worker.id] + 1
console.clear()
console.log(count)
});
// Bind to a port
app.listen(8080);
console.log(`|-- ${process.pid}`);
}
Я ожидал распределения 25% нагрузки между 4 рабочими. Но после запуска несколько раз мой сценарий с артиллерией я получаю
{ '1': 0, '2': 0, '3': 55000, '4': 0 }
На поле битвы находится только рабочий 3, другие пьют пиво и играют в карты.
Я что-то не так делаю или мне что-то не хватает при балансировке нагрузки в nodejs?