如何使用Nodejs多CPU内核进行多进程?

时间:2017-04-13 02:58:01

标签: node.js performance

我有CPU 4内核,我有一些像这样的代码:

setInterval(function() {
   Player.RunUpdate();
   Animal.RunUpdate();
   Bullet.RunUpdate();
   GameItems.RunUpdate();
}, 1E3 / FPS);

每个.RunUpdate()都是这样的循环:

for(var id in player_list){
   //check something and update postion
}

如何为一个.RunUpdate()使用一个核心?可能吗?例如:

setInterval(function() {
  core_1{
     Player.RunUpdate();
  }
  core_2{
     Animal.RunUpdate();
  }
  core_3{
     Bullet.RunUpdate();
  }
  core_4{
     GameItems.RunUpdate();
}, 1E3 / FPS);

感谢阅读!

2 个答案:

答案 0 :(得分:0)

您可以使用群集npm,因此它将使用所有cpu核心。

使用群集,它将创建合作者

参考代码click here

答案 1 :(得分:0)

我可以理解你想要使用CPU核心,我建议你运行下面的代码。

将其保存为server.js然后使用节点命令运行它,例如" node server.js"。

在下面的代码中,假设你的CPU有4个核心,那么这个代码将创建4个线程(因为你的CPU通过这行代码require('os').cpus().length有4个核心)。

这使您的程序执行速度提高了4倍。 现在您可以假设您可以相应地使用CPU的核心。

var http = require('http');
var cluster = require('cluster');
var numCPU = require('os').cpus().length;

if (cluster.isMaster) {
    console.log(`Master ${process.pid} is running`);

    for (let i = 0; i < numCPU; i++) {
        console.log('' + i + '.' + cluster.fork());
    }

    cluster.on('exit', (worker, code, signal) => {
        console.log(`Worker ${worker.process.pid} died.`);
    });

} else {
    http.createServer((req, res) => {
        res.writeHead(200, { 'content-type': 'plain/text' });
        res.end('Hello cluster');
    }).listen(8000, () => {
        console.log('server is running on 8000');
    });
    console.log(`Worker ${process.pid} started`);