Node学习记录之cluster模块


Posted in Javascript onMay 31, 2017

在如今机器的CPU都是多核的背景下,Node的单线程设计已经没法更充分的"压榨"机器性能了。所以从v0.8开始,Node新增了一个内置模块——“cluster”,故名思议,它可以通过一个父进程管理一坨子进程的方式来实现集群的功能。

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length; // 获取CPU的个数
 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
 
  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.process.pid + ' died');
  });
} else {
  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

通过isMaster属性,判断是否Master进程,是则fork子进程,否则启动一个server。每个HTTP server都能监听到同一个端口。但是在实际项目中,我们的启动代码一般都已经封装在了app.js中,要把整块启动逻辑嵌在上面的if else中实在不优雅。 所以,我们可以这样:

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  // 其它代码
  
} else {
  require("./app.js");
}

简单之处就在于原本的应用逻辑根本不需要知道自己是在集群还是单边。(当然,如果应用在内存中维护了某些状态,比如session,就需要运用某些机制来共享了,这里不详说)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS上传前预览图片实例
Mar 25 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
Jan 26 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
js 倒计时(高效率服务器时间同步)
Sep 12 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
Aug 30 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
Mar 19 Javascript
解决layUI的页面显示不全的问题
Sep 20 Javascript
JS变量提升及函数提升实例解析
Sep 03 Javascript
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
Express框架之connect-flash详解
May 31 #Javascript
node.js中express-session配置项详解
May 31 #Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 #Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 #Javascript
JS简单实现自定义右键菜单实例
May 31 #Javascript
页面间固定参数,通过cookie传值的实现方法
May 31 #Javascript
基于react框架使用的一些细节要点的思考
May 31 #Javascript
You might like
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
简单介绍Python中的struct模块
2015/04/28 Python
python僵尸进程产生的原因
2017/07/21 Python
Python_LDA实现方法详解
2017/10/25 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
人事助理岗位职责
2013/11/18 职场文书
社团活动策划书范文
2014/01/09 职场文书
写给老婆的检讨书
2014/02/21 职场文书
环保建议书600字
2014/05/14 职场文书
护林员个人总结
2015/03/04 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书