NodeJS多进程
NodeJS多进程
Node以单线程的方式运行,通过事件驱动的方式来减少开销车,处理并发。我们可以注册多进程,然后监听子进程的事件来实现并发
简介
Node提供了child_process模块来处理子进程,有三种形式
- exec:直接在terminal里面开启进程
- spawn:指定命令+参数
- fork:与spawn类似,默认node执行,并且父子间建立通信管道,可以实现进程间通信
exec
slave.js
var f = function(){
// process全局可以获得当前进程的信息
console.log("进程", process.argv[2] + "执行结束")
}
// 延迟运行,现node的注册机制和并发
setTimeout(f, 1000*(3-process.argv[2]));
master.js
const child_process = require('child_process')
for (var id = 0; id<3; id++){
// 开启子进程,并处理输出
var subProcess = child_process.exec('node slave.js '+id,function (error, stdout, stderr) {
if (error){
console.error(error)
}
else{
console.log('stdout: '+stdout)
console.log('stderr: '+stderr)
}
})
// 监听三个进程
subProcess.on('exit',function (code) {
console.log("子进程已经退出 "+code) //打印退出码
})
}
子进程已经退出 0
stdout: 进程 2执行
stderr:
子进程已经退出 0
stdout: 进程 1执行
stderr:
子进程已经退出 0
stdout: 进程 0执行
stderr:
spawn
const child_process = require('child_process')
for (var id = 0; id<3; id++){
// 开启子进程,并处理输出,这种传参方式更加规整一些
var subProcess = child_process.spawn('node', ['slave.js', id])
// 监听流
subProcess.stdout.on('data',function (data) {
console.log('stdout: '+data)
})
subProcess.stderr.on('data',function (data) {
console.log('stderr: '+data)
})
// 监听三个进程
subProcess.on('exit',function (code) {
console.log("子进程已经退出 "+code) //打印退出码
})
}
运算结果与exec版本一致
fork
const child_process = require('child_process')
for (var id = 0; id<3; id++){
// 开启子进程,并处理输出
var subProcess = child_process.fork('slave.js', [id])
// 监听三个进程
subProcess.on('exit',function (code) {
console.log("子进程已经退出 "+code) //打印退出码
})
}
运算结果
进程 2执行结束
子进程已经退出 0
进程 1执行结束
子进程已经退出 0
进程 0执行结束
子进程已经退出 0
值得注意的是,fork的子进程输出内容输出在父进程的同一个terminal中
NodeJS多进程的更多相关文章
- nodeJs多进程Cluster
在前端页面中,如果我们想进行多进程,我们会用到WebWorker,而在NodeJs中,我们如果想充分利用服务器核心资源,我们会用到Node中Cluster模块 直接上代码吧: const cluste ...
- 浅谈NodeJS多进程服务架构基本原理
阅读目录 一:nodejs进程进化及多进程架构原理 二:node中child_process模块实现多进程 三:父子进程间如何通信? 四:理解cluster集群 回到顶部 一:nodejs进程进化及多 ...
- NodeJs多进程和socket.io通讯-DEMO
一.开启多进程 const os = require('os'); const cp = require('child_process'); const forkList = {}; const fo ...
- nodejs review-03
39 Serve different file types with our server 处理文件类型 function content_type(filename) { var ext = pat ...
- nodejs(二) --- 重要知识点回顾
1. 运行一个nodejs文件, 如一个js文件中只含有console.log("hello world");的文件,我们再git里运行node,即 node hello.js 即 ...
- node.js WebService异常处理(domain)以及利用domain实现request生命周期的全局变量
成熟的Web Service技术,例如Fast CGI.J2EE.php,必然会对代码异常有足够的保护,好的Web必然会在出错后给出友好的提示,而不是莫名其妙的等待504超时.而node.js这里比较 ...
- 自建简易FaaS平台
近些年来,传统的 IaaS.PaaS 已经无法满足人们对资源调度的需求了.各大云厂商相继开始推出自家的 Serverless 服务.Serverless 顾名思义,它是"无服务器" ...
- 关于Nodejs的多进程模块Cluster
关于Nodejs的多进程模块Cluster 前述 我们都知道nodejs最大的特点就是单进程.无阻塞运行,并且是异步事件驱动的.Nodejs的这些特性能够很好的解决一些问题,例如在服务器开发中,并 ...
- Nodejs中cluster模块的多进程共享数据问题
Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ...
随机推荐
- DapperHelper 帮助类
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- Git 将本地库添加到远程仓库
git remote add origin ssh://admin@127.0.0.1:29418/Prjs/prj1.git git push -u origin master
- 监控宝设置snmp
https://wiki.jiankongbao.com/doku.php/%E6%96%87%E6%A1%A3:snmp%E8%AF%8A%E6%96%AD
- virtualenv and virtualenvwrapper
virtualenv 1.下载virtualenv工具 通过物理环境的pip工具安装 清华 国内 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/ ...
- 请推荐几个asp.net下做网站的好的开源框架
1.We7 CMS We7 CMS是由西部动力开发的一款充分发掘互联网Web2.0(如博客.RSS等)的信息组织优势,将其理念利用到政府企事业网站的构建.组织.管理中的网站建设和管理方面的产品. 系统 ...
- ios线程和GCD和队列同步异步的关系
1.什么是进程? 进程是指在系统中正在运行的一个应用程序.比如同时打开QQ.Xcode,系统就会分别启动2个进程.截图 2.什么是线程? 1).一个进程要想执行任务,必须得有线程(每一个进程至少要有一 ...
- 【原创】java socket 和.net socket 通讯 demo
结束符协议"##" import java.io.BufferedReader; import java.io.IOException; import java.io.InputS ...
- net core体系-web应用程序-4net core2.0大白话带你入门-4asp.net core配置项目访问地址
asp.net core配置访问地址 .net core web程序,默认使用kestrel作为web服务器. 配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Pr ...
- ZJOI2018 胖 二分 ST表
原文链接https://www.cnblogs.com/zhouzhendong/p/ZJOI2018Day2T2.html 题目传送门 - BZOJ5308 题目传送门 - LOJ2529 题目传送 ...
- responseHandler
resonsehandler 接受服务端传过来的数据,然后在这个函数里处理好要显示的数据在return个table显示 <!DOCTYPE html> <html lang=&quo ...