我是靠谱客的博主 无限香菇,最近开发中收集的这篇文章主要介绍【node】利用多核提高性能:cluster详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

从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详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部