2017-04-13 133 views
0

我有CPU 4個內核,我有一些像這樣的代碼:如何使用Nodejs多CPU核心進行多進程?

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); 

感謝您的閱讀!

+0

集羣模塊! – Sikorski

回答

0

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

使用集羣,將創建聯合工人

參考代碼click here

0

正如我可以理解,你要使用的CPU核心,我會建議你運行下面的代碼。

將其另存爲server.js,然後使用節點命令(如「node server.js」)運行它。

在下面的代碼中,假設你的CPU有4個核心然後這個代碼將創建4個線程(由於你的CPU有4個核心線,所以這行代碼爲require('os').cpus().length)。

這使得您的程序執行速度提高了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`);