91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

深度理解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

铁岭县| 成安县| 库车县| 清原| 云林县| 新闻| 莱芜市| 翼城县| 衡阳县| 曲阳县| 长葛市| 巴林右旗| 丹巴县| 澎湖县| 汽车| 杭锦后旗| 岚皋县| 建始县| 淅川县| 应用必备| 苗栗县| 都安| 蚌埠市| 马山县| 桃江县| 平果县| 高碑店市| 普定县| 察隅县| 平远县| 阳信县| 东乌| 宁河县| 镇原县| 溧水县| 丰台区| 大足县| 交口县| 青冈县| 沂南县| 汽车|