博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs中cluster模块的多进程共享数据问题
阅读量:5104 次
发布时间:2019-06-13

本文共 1410 字,大约阅读时间需要 4 分钟。

Nodejs中cluster模块的多进程共享数据问题

前述

  nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程如何共享数据的问题。

进程间数据共享

  首先举个简单的例子,代码如下:

复制代码
var cluster = require('cluster'); var data = 0;//这里定义数据不会被所有进程共享,各个进程有各自的内存区域 if (cluster.isMaster) { //主进程     var numCPUs = require('os').cpus().length;     for (var i = 0; i < numCPUs; i++) {         var worker = cluster.fork();     }        data++;     console.log('DATA VALUE in MainProcess: %d ' , data);} else { //子进程,会被调用numCPUs次     data++;     console.log('DATA VALUE in ChildProcess %d: %d ' cluster.worker.id, data);}
复制代码

  运行结果如下:

  为什么我们在主进程代码块以及子进程代码块之外来声明的变量不应该是全局变量么?答案是否定的。因为每个进程在内存都有各自的区域,因此data++操作是在各自的区域内进行的,也就是说变量data没被共享。那么怎么来在各进程之间共享数据呢?来看下面的代码:

复制代码
var cluster = require('cluster'); var http = require('http');  if (cluster.isMaster) {   var numCPUs = require('os').cpus().length;   var data = 0;   // 启动多个进程.   for (var i = 0; i < numCPUs; i++) {    //增加一个进程     var worker_process = cluster.fork();     //侦听子进程的message事件     worker_process.on('message', function(msg) {       if (msg.cmd && msg.cmd == 'notifyRequest') {         data++;         console.log('DATA VALUE : %d ', data);      }     });   } } else {     process.send({ cmd: 'notifyRequest' }); }
复制代码

  运行结果如下:

因此如果需要共享数据,需要在进程间使用消息通知来达到这个目的。

 

转自(http://www.cnblogs.com/CodeGuy/archive/2013/05/27/3101312.html)

转载于:https://www.cnblogs.com/wuxiang/p/4762904.html

你可能感兴趣的文章
2019年2月备战春招最新大数据+Java岗位+人工智能岗位资料免费送【限时领取】...
查看>>
.NET设计模式简析
查看>>
SQL高效率语句(二)
查看>>
web优化之-js动态合并 动态压缩 去掉js重复引用 js缓存 js延迟加载
查看>>
201704221048_《ES6模板字符串》
查看>>
【BZOJ-2595】游览计划 斯坦纳树
查看>>
Ubuntu——配置JDK
查看>>
导弹拦截版
查看>>
jzoj5195. 【NOIP2017提高组模拟7.3】A(递推,打表)
查看>>
robot framework接口测试之一-完整的测试用例
查看>>
IOS开发:使用lipo合并armv7,i386,armv7s库文件
查看>>
使用 udev 高效、动态地管理 Linux 设备文件
查看>>
Java8函数之旅(四) --四大函数接口
查看>>
django环境处理
查看>>
记一次企业级爬虫系统升级改造(三):文本分析与数据建模规则化处理
查看>>
javascript window对象
查看>>
Android定制组件之Widget之昨天今天明天
查看>>
JSON
查看>>
JavaScript中的匿名函数及函数的闭包
查看>>
【JMeter】选项-函数助手对话框应用举例
查看>>