为什么集群管理器不能委派正常工作

时间:2019-01-12 19:50:10

标签: node.js

我创建了运行很少工作程序的集群管理器。他们都在工作,但经理几乎只将全部工作委托给一名工人。

这是代码:

const cluster = require('cluster');

if(cluster.isMaster){
 console.log('Master is running: %d', cluster.isMaster);
 var cpuCount = require('os').cpus().length;
 console.log('Amount of CPU: %d', cpuCount);
 // Create a worker for each CPU
 for (var i = 0; i < cpuCount; i += 1) {
     cluster.fork();
 }
 cluster.on('exit', function (worker) {
    // Replace the dead worker, we're not sentimental
    console.log('Worker %d died!', worker.id);
    cluster.fork();
 });

 } else {     
   const express = require('express');
   const app = express();
   function doWork(duration){
      const start = Date.now();
      while(Date.now() - start < duration){}
   }
   app.get('/', (req, res) => {
     console.log('Request that takes 10s to worker %d', cluster.worker.id);
     doWork(10000);
     res.send('it was slow');
   } );
   app.get('/fast', (req, res) => {
     console.log('Normal Request to worker %d', cluster.worker.id);
     res.send('it was fast');
   })
   app.listen(3000);
   console.log('Worker %d running!', cluster.worker.id);
}

cmd的输出:

Master is running: 1
Amount of CPU: 4
Worker 1 running!
Worker 2 running!
Worker 3 running!
Worker 4 running!

Request that takes 10s to worker 4
Normal Request to worker 4

Request that takes 10s to worker 4
Normal Request to worker 4

Request that takes 10s to worker 4
Normal Request to worker 3
Normal Request to worker 4

在输出的第一部分中,您看到运行'node index.js'后,所有内容都已初始化。

之后,我打开了带有两个选项卡的浏览器。在第一个选项卡中,我打开了“ localhost:3000 /”,然后在第二个选项卡“ localhost:3000 / fast /”中非常快速地打开了它。结果位于输出的第二部分。您如何看待集群管理器将工作委派给同一工作人员。

我重复了这个过程,结果是一样的-您在第三部分中看到了。

在最后一步中,我执行了相同的操作,但是我对URL'localhost:3000 / fast /'按下了两次(一个接一个)。第一次单击工作后,您看到的是同一工作人员,但随后再次按到另一工作人员后,您看到的结果。

为什么这样工作?为什么集群管理器没有将工作委派给当时未使用的工人,而是委派给忙碌的同一个人?如何更改此代码以更有效地工作。

感谢您的回复。

0 个答案:

没有答案