当前位置:主页 > nodejs教程 > Nodejs解决cluster模块的多进程如何共享数据问题

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

发布:2019-08-01 21:26:14 217


为网友们分享了相关的编程文章,网友暨依白根据主题投稿了本篇教程内容,涉及到nodejs、cluster、nodejs、多进程、Nodejs解决cluster模块的多进程如何共享数据问题相关内容,已被926网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

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);
}

运行结果如下:Nodejs中解决cluster模块的多进程如何共享数据问题 

为什么我们在主进程代码块以及子进程代码块之外来声明的变量不应该是全局变量么?答案是否定的。因为每个进程在内存都有各自的区域,因此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' }); 
}

运行结果如下:

Nodejs中解决cluster模块的多进程如何共享数据问题

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。


参考资料

相关文章

  • nodejs微信公众号开发素材管理接口浅析

    发布:2020-02-11

    这篇文章主要介绍了详解nodejs微信公众号开发——5.素材管理接口,非常具有实用价值,需要的朋友可以参考下


  • nodeJS模块用法以及简单示例

    发布:2020-03-18

    这篇文章主要介绍了nodeJS模块简单用法,结合实例形式简单分析了nodejs模块定义、引入、注册、启动等相关操作技巧,需要的朋友可以参考下


  • iPhone手机上搭建nodejs服务器的具体方法

    发布:2019-12-06

    这篇文章主要介绍了iPhone手机上搭建nodejs服务器步骤方法,本文给出了详细的操作步骤以及操作命令,需要的朋友可以参考下


  • nodeJS实现简单网页爬虫功能的实例(分享)

    发布:2022-06-23

    给大家整理了关于node的教程,下面小编就为大家带来一篇nodeJS实现简单网页爬虫功能的实例(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • nodejs实现本地上传图片并预览功能实例代码

    发布:2019-09-14

    本篇文章主要介绍了nodejs实现本地上传图片并预览功能(express4.0+) ,具有一定的参考价值,有兴趣的可以了解一下


  • nodejs中间层实现文件上传的方法

    发布:2019-07-30

    这篇文章主要介绍了node中间层实现文件上传功能,本文给大家介绍的非常详细,需要的朋友可以参考下


  • 关于nodejs密码加密中生成随机数

    发布:2020-03-10

    本篇文章主要介绍了nodejs密码加密中生成随机数的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • 关于sails框架的学习指南

    发布:2020-02-04

    本文从最基础的sails框架知识开始讲起,通过示例给我们展示了sails框架的各个方面,非常的不错,推荐给小伙伴们


网友讨论