node.js之多进程

本文介绍了Node.js中的多进程技术,包括使用child_process模块的fork方法创建子进程,父子进程间通过message事件进行通信,以及Master如何通过句柄分发请求给Worker处理,实现简单的负载均衡。同时探讨了多个Worker监听同一端口的抢占式调度机制,及其对负载均衡的影响。
摘要由CSDN通过智能技术生成

介绍

NodeJS的JavaScript运行在单个进程的单个线程上,一个JavaScript执行进程只能利用一个CPU核心,

而如今大多数CPU均为多核CPU,为了充分利用CPU资源,Node提供了child_process和cluster模块来实现多进程以及进程管理。

我们这里将根据Master-Worker模式,搭建一个简单的服务器集群来充分利用多核CPU资源,探索进程间通信、负载均衡等知识。

下图是Master-Worker模式,进程分为master进程和worker进程,master进程负责调度或管理worker进程,worker进程则负责具体的业务处理。

在服务器层面,worker可以是一个服务进程,负责处理来自客户端的请求,多个worker便相当于多个服务器,从而构成一个服务器集群。

master则是负责创建worker,将来自客户端的请求分配到各个服务器上去处理,并监控worker的运行状态以及进行管理等操作。

在这里插入图片描述

child_process

1.创建子进程

child_process模块提供了spawn()、exec()、execFile()、fork()这4个方法用于创建子进程,

我们这里使用fork()方法来创建子进程,fork()方法只需指定要执行的JavaScript文件模块,即可创建Node的子进程。

下面是简单的HelloWorld示例,master进程根据CPU数量创建出相应数量的worker进程,worker进程中利用进程ID来标记自己。

以下是master进程代码,文件名为master.js。

const childProcess = require('child_process')

const cpuNum = require('os').cpus().length

for (let i = 0; i < cpuNum; ++i) {

  childProcess.fork('./worker.js')
}

console.log('Master: Hello world.')

以下是worker进程的代码,文件名为worker.js。

 console.log('Worker-' + process.pid + ': Hello world.')
 

执行node master.js,得到如下结果,master创建4个worker后输出HelloWorld信息,每个worker也分别输出自己的HelloWorld信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值