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中的非阻塞方法介绍
Jun 05 NodeJs
Nodejs进程管理模块forever详解
Jun 01 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
学习 NodeJS 第八天:Socket 通讯实例
Dec 21 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
3分钟快速搭建nodejs本地服务器方法运行测试html/js
Apr 01 NodeJs
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
Jan 05 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
PHP常用技巧汇总
2016/03/04 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
基于Python的身份证号码自动生成程序
2014/08/15 Python
简单理解Python中基于生成器的状态机
2015/04/13 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
Python restful框架接口开发实现
2020/04/13 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
python 8种必备的gui库
2020/08/27 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
工程力学硕士生的自我评价范文
2013/11/16 职场文书
护士思想汇报
2014/01/12 职场文书
高中生物教学反思
2014/02/05 职场文书
温馨提示标语
2014/06/26 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
python playwright之元素定位示例详解
2022/07/23 Python