用NodeJS实现集群计算
来源:互联网 发布:mac能玩qq游戏大厅吗 编辑:程序博客网 时间:2024/05/22 17:58
Node的单个实例运行在单个的线程中,要充分利用多核系统,我们可以运行Node进程集群来处理负载。
也就是说,如果系统有8核,单个Node实例只能使用其中1核,可以利用cluster包的workers概念来充分利用所有的核。有趣的是,它们可以共享同一个端口。
在一个4核的计算机上,输出如下:
也就是说,如果系统有8核,单个Node实例只能使用其中1核,可以利用cluster包的workers概念来充分利用所有的核。有趣的是,它们可以共享同一个端口。
该模块还处于实验阶段。
- 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);
- }
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
Number of request served = 0A worker with #2 is now connected to 0.0.0.0:8000A worker with #4 is now connected to 0.0.0.0:8000A worker with #1 is now connected to 0.0.0.0:8000A worker with #3 is now connected to 0.0.0.0:8000Number of request served = 0...Number of request served = 2..Number of request served = 4...Number of request served = 6
- 用NodeJS实现集群计算
- 用NodeJS实现集群计算
- 用集群实现网格计算
- nodejs + neo4j + d3js 集群图的实现
- 用NodeJS实现APNS
- 用NodeJS实现APNS
- Nodejs的集群
- 集群计算
- 集群计算
- 用Nodejs实现文件服务器(一)
- 用nodejs实现聊天功能
- 玩转nodeJS系列:使用原生API实现简单灵活高效的路由功能(支持nodeJs单机集群),nodeJS本就应该这样轻快
- 玩转Nodejs的集群
- nodejs+nodejs-websocket 实现websocket
- 用nodejs实现json和jsonp服务
- 用nodejs实现json和jsonp服务
- 用NodeJS实现一个简单的聊天室
- 用代码实现nodejs关闭服务器
- 第十一周上机任务项目2
- NodeJS 常用模块推荐
- posix多线程有感--线程高级编程(线程内存模式)
- 给redhat 6.0配置yum源
- SGU247(排列组合与大数运算)
- 用NodeJS实现集群计算
- CString与char*之间的转换
- JAVASE----17----GUI
- C语言中进制之间的想换转换
- java实现队列
- Linux 时钟管理(俺进行了微原创)
- 人类
- 千兆光口自协商
- UNIX共享内存总结