深度理解nodejs[4]-cluster多线程node-创新互联

传统node单线程缺陷

下面的express程序可以看出nodejs单线程的缺陷,当访问主页面localhost:3000时,doWork(5000)方法会暂停5秒钟。
由于长时间的等待时间会使得node陷入到停顿的状态。当其他的请求来的时候,也只能够等待。例如当访问后立即访问localhost:3000/fast,只能够等待一段时间。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、虚拟空间、营销软件、网站建设、庆云网站维护、网站推广。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const express = require('express');
const app = express();
function doWork(duration){
 const start = Date.now();
 while(Date.now()-start<duration){}
}

app.get('/',(req,res)=>{
 doWork(5000);
 res.send("i like jonson")
})

app.get('/fast',(req,res)=>{
 res.send("i like jonson")
})
app.listen(3000);

cluster多线程node增强node表现

使用nodejs内置的cluster module可以让多个node实例同时运行,管理多个node实例。
cluster管理多个node实例。cluster manager实例与child实例都会调用此文件中的代码。

通过cluster.isMaster将两者区分开。
cluster manager 中cluster.isMaster为true。
child实例实例中cluster.isMaster为false。

cluster.fork()代表新开一个child 实例。

下面的代码在一开始,cluster manager实例就新开了4个child 实例。
所以即便是一个child停顿不会影响其他child实例工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const cluster = require("cluster");

if(cluster.isMaster){

 cluster.fork();
  cluster.fork();
   cluster.fork();
    cluster.fork();
}else{
 const express = require('express');
 const app = express();
 function doWork(duration){
  const start = Date.now();
  while(Date.now()-start<duration){}
 }

 app.get('/',(req,res)=>{
  doWork(5000);
  res.send("i like jonson")
 })

 app.get('/fast',(req,res)=>{
  res.send("i like jonson")
 })
 app.listen(3000);
}

cluster缺陷

并不是cluster创建的child实数越多越好。因为cluster会让所有的请求都同时的结束。
想象一下我们fork了6个child,当6个请求来的时候,如果计算机没有这个处理能力,只能处理两个线程,但是6个请求又必须同时的时间结束,这反而拖慢了所有的速度。
这不如两个两个的执行好!

  • 本文链接: https://dreamerjonson.com/2018/11/10/深度理解nodejs-4-cluster多线程node/

  • 版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!

深度理解nodejs[4]-cluster多线程node

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

当前题目:深度理解nodejs[4]-cluster多线程node-创新互联
网站路径:https://www.cdcxhl.com/article4/csiioe.html

成都网站建设公司_创新互联,为您提供全网营销推广网站改版用户体验域名注册网站建设云服务器

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设