0

我有一个 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),所以没有任何反应。

4

0 回答 0