我有一个 12 核处理器,但我什至无法将它的核心与 nodejs 紧密结合使用。(在 Windows 上)
在下面的代码中,我分叉了 12 个具有无限运行时间的进程。
但是,实际上只有(相当)随机数量的进程运行?
代码的示例输出:
示例 1:
get / on process 13456
get / on process 15052
get / on process 16352
示例 2:
get / on process 7464
get / on process 10504
get / on process 16312
get / on process 9524
get / on process 15888
示例 3:
get / on process 19484
get / on process 14032
源代码:cluster-test.js
const express = require('express');
const axios = require('axios');
const cluster = require('cluster');
const port = 3001;
const totalCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Number of CPUs is ${totalCPUs}`);
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < totalCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
console.log("Let's fork another worker!");
cluster.fork();
});
setTimeout(() => {
for (let i = 0; i < totalCPUs; i++) {
axios.get(`http://0.0.0.0:${port}/`);
}
}, 5000);
} else {
start();
}
function start() {
const app = express();
console.log(`Worker ${process.pid} started`);
app.get('/', (req, res) => {
console.log(`get / on process ${process.pid}`);
while (true) {}
});
app.listen(port, () => {
console.log(`App listening on port ${port}`);
});
}
这可以修复为有 12 个活动进程吗?现在,这个集群 API 对我来说似乎毫无用处。
编辑:在我看来,这是由Windows不支持集群轮询引起的。也就是说,在最坏的情况下,所有请求都将被重定向到同一个线程。由于第一个线程正在阻塞(while true
),所以没有任何反应。