利用多核能力——node.js cluster模块

1.新建一个http服务,http.js(已有一个index.htm页面)

const fs = require('fs');

const http = require('http');

http.createServer(function(req,res){

      res.writeHead(200,{'content-type':'text/html'}); //读文件

      res.end(fs.readFileSync(__dirname + '/index.htm','utf-8')); //写出去

}).listen(3000,() => {

      console.log('listened 3000');

})

2.使用cluster模块,使主进程fork一堆子进程,每个子进程跑一个上述的http实例

index.js文件

const cluster = require('cluster');  //引入cluster模块

if(cluster.isMaster){  //如果当前是在主进程

  for(let i = 0;i<os.cpus().length/2;i++){  //获取当前电脑有多少个核的cpu,获取CPU的总的核数

             cluster.fork();   //启动子进程

       }

}else{ //当前不在主进程

  require('./http');

}

可以明显的性能提升

node.js中每个进程都会有4个子线程去完成事件循环

每次fork进程,都是把node.js复制一遍,造成成倍的内存消耗;因此,一般来说,并不会把子进程的数目等于cpu的总的核数,而是会有一些余量os.cpus().length/2

 

3.上述代码,在每一个子进程的代码里面,都去监听了3000端口,而一般来说,计算机里的端口只能被监听一次,如果有多个进程同时监听一个端口,第一个后面的进程全都会报错,报3000端口已经被占用了。而上述代码并未报错,是因为cluster模块复写了clientserver,监听了是文件描述,而不是端口

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值