NodeJS父进程与子进程资源共享原理与实现方法


Posted in NodeJs onMarch 16, 2018

本文实例讲述了NodeJS父进程与子进程资源共享原理与实现方法。分享给大家供大家参考,具体如下:

实验目标:实现父进程与子进程间资源共享

使用模块:cluster

简介:建立node集群,实现多进程,利用child_process来实现IPC,解决多核利用率,提高性能。

原理:

1 Master-worker主从模式的多进程架构

2 fork()复制进程,充分利用cpu资源(根据内核数决定)

3 每个进程都有自己的区域,如果在各自区域内执行操作,资源并未共享。通过监听message事件和send实现消息传递,达到资源共享的效果

4  globalDataError为错误的资源共享方式, globalDataSuccess为正确的资源共享方式。

实现代码:

var cluster = require('cluster');
var cpus = require('os').cpus();
// 传递的事件名
var triggerEvent = {
    inc: 'inc',
    dec: 'dec'
}
// 错误的数据共享方式
var globalDataError = 0;
if (cluster.isMaster) {
  // 正确的数据共享方式
  var globalDataSuccess = 0;
  globalDataError++;
  // 启动多个进程,取决于内核数
  for (var i = 0; i < cpus.length; i++) {
    var worker = cluster.fork();
    worker.on('message', function(msg) {
      switch (msg) {
        case triggerEvent.inc:
          globalDataSuccess++;
          console.log('globalDataSuccess = ', globalDataSuccess);
          break;
        case triggerEvent.dec:
          globalDataSuccess--;
          console.log('globalDataSuccess = ', globalDataSuccess);
          break;
      }
    });
  }
  console.log('Master globalDataError = ', globalDataError);
} else {
  globalDataError++;
  console.log('Worker globalDataError = ', globalDataError);
  process.send(triggerEvent.dec);
  process.send(triggerEvent.inc);
}

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
NodeJS与Mysql的交互示例代码
Aug 18 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
Nodejs搭建wss服务器教程
May 24 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 #NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 #NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 #NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 #NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 #NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 #NodeJs
nodejs acl的用户权限管理详解
Mar 14 #NodeJs
You might like
PHP里的中文变量说明
2011/07/23 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
js微信支付实现代码
2016/12/22 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
python学习之编写查询ip程序
2016/02/27 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python基础知识点 初识Python.md
2019/05/14 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
2014年重阳节活动策划方案书
2014/09/16 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
办公室禁烟通知
2015/04/23 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android