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的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
Nodejs学习笔记之测试驱动
Apr 16 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
Nodejs进阶之服务端字符编解码和乱码处理
Sep 04 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
Python实现发送email的几种常用方法
2014/08/18 Python
python字典get()方法用法分析
2015/04/17 Python
python编程开发之日期操作实例分析
2015/11/13 Python
使用python实现链表操作
2018/01/26 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
对Python3中的print函数以及与python2的对比分析
2018/05/02 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Python异常处理操作实例详解
2018/08/28 Python
python中web框架的自定义创建
2019/09/08 Python
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
晚归检讨书
2014/02/19 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python