Nodejs中解决cluster模块的多进程如何共享数据问题
网络编程 2021-07-04 19:19www.168986.cn编程入门
本篇文章主要介绍了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没被共享。那么怎么来在各进程之间共享数据呢?来看狼蚁网站SEO优化的代码:
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' }); }
运行结果如下:
因此如果需要共享数据,需要在进程间使用消息通知来达到这个目的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 机械手焊接机器人编程 机械手焊接设备编程
- vb数据库编程实例,vb做数据库
- tiobe世界编程语言排行榜,全球编程语言排行
- 成都java编程培训 成都it编程培训中心
- 编程基础培训,编程基础知识培训
- flash游戏编程基础教程,flash游戏开发教程
- 不会英语能学编程吗 不会英语可以学程序员吗
- 爱心代码编程C语言 爱心代码编程c语言公式
- c语言编程学习入门 c语言编程快速入门
- 西门子plc编程培训 西门子plc编程培训班
- 哪里可以学编程 台州哪里可以学编程
- 少儿编程哪个好 少儿编程哪个品牌好
- 编程是什么意思,图形编程是什么意思
- c语言编程软件下载,c语言编程软件在哪下载
- java编程软件下载,java编程下载手机版
- ug编程培训学校,ug编程培训教程