Узел JS Cluster будет использовать 4 ядра процессора одновременно - PullRequest
0 голосов
/ 11 октября 2018

Код сервера

module.exports = function(cluster){
    let express = require('express')
    let app = express()
    app.get('/',function(req, res){

      console.log('Worker %d started!'+new Date(), cluster.worker.id);

      sleep(60000)

      for(var i = 0; i < 999999999; i++) {}

      res.end('Hello from Worker ' + cluster.worker.id);
      console.log('Worker %d returned!'+new Date(), cluster.worker.id);
    });
    app.listen(8080,function(){
      console.log('Application started! Worker %d started!, process %d', cluster.worker.id, cluster.worker.process.pid);
    });
    function sleep(miliseconds) {
        var currentTime = new Date().getTime();

        while (currentTime + miliseconds >= new Date().getTime()) {
        }
     }
  }

Код кластера

let cluster = require('cluster');
let app = require('./index');
cluster.schedulingPolicy = cluster.SCHED_RR;
if(cluster.isMaster){
  let cpuCount = require('os').cpus().length;
  for (var i = 0; i < cpuCount; i += 1) {
    cluster.fork();
  }

  cluster.on('exit', function() {
    cluster.fork();
  });
}else{
  app(cluster);
}
cluster.on('fork', function(worker) {
console.log('forked -> Worker %d', worker.id);
});

-При появлении нескольких API на стандартном экспресс-порту 8080, тогдаон использует только одно ядро ​​ЦП, где он ожидает процесса первого попадания, а затем будет выполнен следующий запрос.-Почему кластер не использует другое ядро ​​ЦП для параллельной обработки запроса 4 (для четырехъядерного ЦП).

1 Ответ

0 голосов
/ 12 октября 2018

Вместо запуска скрипта из одной вкладки, запустите его с несколькими вкладками команд, все процессоры вашего компьютера будут использованы, вы можете проверить их в системном мониторе.

...