用NodeJS实现集群计算
Node的单个实例运行在单个的线程中,要充分利用多核系统,我们可以运行Node进程集群来处理负载。
也就是说,如果系统有8核,单个Node实例只能使用其中1核,可以利用cluster包的workers概念来充分利用所有的核。有趣的是,它们可以共享同一个端口。
该模块还处于实验阶段。
</div> </div>
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. require('os').cpus().forEach(function(){ cluster.fork(); }); // In case the worker dies! cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); // As workers come up. cluster.on('listening', function(worker, address) { console.log("A worker with #"+worker.id+" is now connected to " +\ address.address +\ ":" + address.port); }); // When the master gets a msg from the worker increment the request count. var reqCount = 0; Object.keys(cluster.workers).forEach(function(id) { cluster.workers[id].on('message',function(msg){ if(msg.info && msg.info == 'ReqServMaster'){ reqCount += 1; } }); }); // Track the number of request served. setInterval(function() { console.log("Number of request served = ",reqCount); }, 1000); } else { // Workers can share the same port! require('http').Server(function(req, res) { res.writeHead(200); res.end("Hello from Cluster!"); // Notify the master about the request. process.send({ info : 'ReqServMaster' }); }).listen(8000); }
在一个4核的计算机上,输出如下:
Number of request served = 0 A worker with #2 is now connected to 0.0.0.0:8000 A worker with #4 is now connected to 0.0.0.0:8000 A worker with #1 is now connected to 0.0.0.0:8000 A worker with #3 is now connected to 0.0.0.0:8000 Number of request served = 0 ... Number of request served = 2 .. Number of request served = 4 ... Number of request served = 6
来自:
http://blog.csdn.net/chszs/article/details/8054773