概述
从0.6版本开始
node.js 提供了一个核心模块
cluster
cluster的功能是生成与当前进程相同的子进程,并且允许父进程和子进程之间共享端口
node.js的另一个核心模块
child_progress
也提供了相似的进程生成功能
then,区别是什么呢?
cluster允许跨进程端口复用,给我们的网络服务器开发,带来了很大的方便
每个端口都代表着一个进程,也可以说是一个程序,但是每一个程序理论上都是可以调用所有的cpu资源的
先在app.js里边做下判断:
//module.parent ~外部启动
//如果不是外部调用,也就是自己主动调用的话,执行if内代码
if(!module.parent){
app.listen(3500);
console.log("Express server listening on port %d in %s mode",
app.address().port, app.settings.env);
}
然后写一个cluster.js
let cluster = require('cluster');
if (cluster.isMaster) {
// Here is in master process
let cpus = require('os').cpus().length;
console.log(`Master PID: ${process.pid}, CPUs: ${cpus}`);
// Fork workers.
for (var i = 0; i < cpus; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Here is in Worker process
console.log(`Worker PID: ${process.pid}`);
var app = require('./app.js');
app.listen(4000);
}
接下来我们运行下cluster看看怎么样:
192:microblog zack$ node cluster.js
Master PID: 21734, CPUs: 4
Worker PID: 21735
Worker PID: 21736
Worker PID: 21737
Worker PID: 21738
一共是四个cpu,所以我们生成4个worker
我们再看一下它的树形结构:
//先更新brew然后再安装
brew update
brew install pstree
pstree 21734
-+= 21734 zack node cluster.js
|--- 21735 zack /usr/local/bin/node /Users/zack/microblog/cluster.js
|--- 21736 zack /usr/local/bin/node /Users/zack/microblog/cluster.js
|--- 21737 zack /usr/local/bin/node /Users/zack/microblog/cluster.js
--- 21738 zack /usr/local/bin/node /Users/zack/microblog/cluster.js
然后让我们看一下8000端口都又些什么?
在浏览器输入你的服务地址,然后运行下边命令:
lsof -a -i tcp:8000 -P -R -l
-a:结果进行与运算
-i :显示所有链接,无论是ipv4还是6
-p:查看进程id打开了哪些文件
-R:不断的执行,直到收到中断信号
-l :在输出显示用户id,而不是用户名
这是客户端和服务端交换信息的那一段,加一行注释吧,更好明白
COMMAND 进程的名称,我们主要看服务端node这几个
DEVICE值不同说明是开了5个不同的服务
master只是监听分发的作用,而四个worker处理io返回的逻辑内容
我们知道:
如果不用cluster的情况下,
一个端口开两个服务,一个是做listen,一个是处理io结果
这样使用的也就是单核cpu了,上限也就是单核cpu的饱和度
PS:自己可以绕开cluster,直接npm start看一下~
现在我们看到4个cpu都在做这件事
至于四个woker的调度,是由master负责,默认是平均的
最后
以上就是无限香菇为你收集整理的【node】利用多核提高性能:cluster详解的全部内容,希望文章能够帮你解决【node】利用多核提高性能:cluster详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复