亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-07-15 15:26:11 來源:網絡 閱讀:463 作者:jonson_jackson 欄目:開發技術

傳統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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭通市| 乌恰县| 石门县| 文昌市| 昭平县| 克什克腾旗| 聂荣县| 泰和县| 丹巴县| 嘉鱼县| 闽清县| 玉树县| 沐川县| 香河县| 固始县| 祁东县| 正蓝旗| 马关县| 靖江市| 通渭县| 罗江县| 平顺县| 潢川县| 左贡县| 武川县| 栖霞市| 米脂县| 宁武县| 汝南县| 黔西| 新河县| 南漳县| 双流县| 疏附县| 石阡县| 青神县| 五家渠市| 昭平县| 乐陵市| 尚志市| 萍乡市|