深さ理解nodejs[4]-clusterマルチスレッドnode

2199 ワード

以下のexpressプログラムでは、nodejs単スレッドの欠陥が見られます.ホーム・ページlocal host:3000にアクセスすると、doWork(5000)メソッドは5秒間停止します.長い待ち時間によって、nodeは休止状態に陥ることがあります.他の要請が来たら、待つだけです.例えば、訪問後すぐにロカホスト: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{
  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{
    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つの要求が来た時に、コンピュータがこの処理能力がないと、2つのスレッドしか処理できません.しかし、6つの要求は同時に終わる必要があります.これはかえってすべての速度を遅くしました.これは二つの二つの実行よりいいです.
  • 本のリンク: https://dreamerjonson.com/2018/11/10/深度理解nodejs-4-clusterマルチスレッドnode/
  • 著作権声明: このブログのすべての文章は特別声明のほか、すべて採用しています. CC BY 4.0 CNプロトコル ライセンス契約転載は出典を明記してください.
  •  
    鄭建勲ブロックチェーンエンジニア&Webエンジニア
    災難は後を絶たずやってくる.これこそ世の常識だ.泣いて訴えさえすれば、誰が助けてくれると思いますか?失敗したら、私はこれぐらいの男だとしか言いようがない.