亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

使用cluster 將自己的Node服務器擴展為多線程服務器

2024-05-06 16:10:32
字體:
來源:轉載
供稿:網友
nodejs在v0.6.x之后 增加了一個模塊 cluster 用于實現多進程,利用child_process模塊來創建和管理進程,增加程序在多核CPU機器上的性能表現。本文將介紹利用cluster模塊創建的多線程的問題。
 
 

用nodejs的朋友都有了解,node是單線程的,也就是說跑在8核CPU上,只能使用一個核的算力。
單線程一直是node的一個詬病,但隨著0.6版本中引入cluster之后,這個情況則得到了改變,開發人員可以依靠cluster很輕松的將自己的Node服務器擴展為多線程服務器了。

什么是Cluster

cluster是node提供的一個多線程庫,用戶可以使用它來創建多個線程,線程之間共享一個監聽端口,當有外部請求這個端口時,cluster會將請求轉發到隨機線程里。因為每個node線程都會占用幾十兆的內存,所以不能像php那樣對每個請求創建一個線程,一般來說創建的線程數最多都不會超過cpu的核心數量。

 

復制代碼代碼如下:

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

 

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.process.pid + ' died');
  });
} else {
  // Workers can share any TCP connection
  // In this case its a HTTP server
  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world/n");
  }).listen(8000);
}

 

如以上代碼所示,程序運行時cluster.isMaster會被設置為true,當調用cluster.fork()之后,程序會創建一個線程,并重新運行,這時cluster.isMaster就被設置為false了。我們就主要通過這個變量來判斷當前線程是不是子線程的。

還可以注意到,每個子線程被創建之后,都會監聽8000端口而不會引起沖突,這就是cluster共享端口的功能了。

線程之間的通信

當線程被創建之后,他們彼此之間是沒有共享內存或者數據的。所有的數據交換只能通過worker.send和worker.on('message',handler)在主線程里處理,下面列舉一個廣播系統的實例。

 

復制代碼代碼如下:

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

 

if (cluster.isMaster) {

  var workers=[];
  //新建worker
  function newWorker(){
    var worker=cluster.fork();

    //監聽信息,如果type為broadcast的話,則確定為廣播
    worker.on('message', function(msg) {
      if(msg.type=='broadcast'){
        var event=msg.event;
        //向所有worker發送此條廣播
        workers.forEach(function(worker){
          worker.send(event);
        })
      }
    });
    return worker;
  }

  for (var i = 0; i < numCPUs; i++) {
    workers.push(newWorker());
  }

    cluster.on('online',function(worker){
        console.log('worker %d is online',worker.id);
    })
} else {
  var worker=cluster.worker;

  //廣播就是發送一個type為broadcast的信息,event就是廣播內容
  worker.broadcast=function(event){
    worker.send({
      type:'broadcast',
      event:event
    });
  }

  //這里用worker.on貌似不能監聽到返回的信息
  process.on('message',function(event){
    console.log('worker: '+worker.id+' recived event from '+event.workerId);
  })

  //發送廣播
  worker.broadcast({
    message:'online',
    workerId:worker.id
  })
}

 

需要注意的問題

在上面也提到,線程之間是不能共享數據的,所有的數據交換只能通過線程之間的通信來交換。而且所交換的數據都是可序列化的,所以函數,文件描述符和HttpResponse之類的東西都不能傳遞。

如果使用cluster,則需要在程序設計的時候考慮到數據交換的問題,我自己的做法就是將類似session的這些數據都存放在redis里,每個線程都做好存取的工作,所有的數據都不放在node內存里。

最后一點,cluster目前還被Node官方標記為Experimental狀態,api在將來也許會改變。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍偷拍网址| 日韩欧美极品在线观看| 日本欧美精品在线| 日韩av网站导航| 亚洲美女性视频| 亚洲国产精品成人av| 亚洲精美色品网站| 奇米4444一区二区三区| 国产日韩欧美电影在线观看| 国产精品尤物福利片在线观看| 亚洲国产欧美一区| 成人女保姆的销魂服务| 亚洲精品美女久久久| 久久久精品2019中文字幕神马| 国产精品久久久久久久久久久久久久| 亚洲人成电影网站色…| 欧美精品18videosex性欧美| 亚洲精品视频播放| 久久久视频在线| 国产欧美亚洲视频| 欧美性极品xxxx娇小| 国内免费久久久久久久久久久| 亚洲成人三级在线| 国产精品视频一区国模私拍| 亚洲高清在线观看| 国产97在线|亚洲| 97视频在线播放| 国产精品福利网站| 国产精品久久中文| 欧美在线精品免播放器视频| 久久精品国产一区二区电影| 亚洲天堂av在线免费| 亚洲欧洲一区二区三区久久| 中文字幕欧美精品在线| 国产不卡一区二区在线播放| 一区二区福利视频| 国产999在线观看| 亚洲国产成人久久综合一区| 久久久久久有精品国产| 欧美激情18p| 久久天天躁狠狠躁夜夜躁| 91免费的视频在线播放| 亚洲天堂av综合网| 色噜噜久久综合伊人一本| 日韩中文在线不卡| 中文字幕欧美日韩精品| 亚洲国产精品悠悠久久琪琪| 亚洲精品99久久久久中文字幕| 日韩精品在线免费播放| 久久精品欧美视频| 久久久精品一区二区三区| 色偷偷噜噜噜亚洲男人| 国内偷自视频区视频综合| 欧美夫妻性生活xx| 韩国三级日本三级少妇99| 中文字幕日韩欧美在线视频| 亚洲free性xxxx护士白浆| 北条麻妃在线一区二区| 国产精品主播视频| 日韩电影在线观看永久视频免费网站| 国产精品一区二区久久精品| 亚洲已满18点击进入在线看片| 国产精品444| 欧美日韩国产影院| 久久久久999| 成人精品一区二区三区电影黑人| 国产成人精品一区二区三区| 国产精品大片wwwwww| 国产精品自拍视频| 国产婷婷色综合av蜜臀av| 欧美成人精品不卡视频在线观看| 亚洲桃花岛网站| 久久九九有精品国产23| 亚洲肉体裸体xxxx137| 7777免费精品视频| 亚洲欧美日本另类| 国外成人免费在线播放| 一区二区欧美久久| 日韩中文字幕在线播放| 久久综合电影一区| 欧美巨乳在线观看| 欧美精品成人91久久久久久久| 欧美精品久久久久a| 亚洲人成网站在线播| 欧美在线观看日本一区| 91在线观看免费网站| 欧美激情综合色综合啪啪五月| 久久天天躁夜夜躁狠狠躁2022| 成人观看高清在线观看免费| 欧美成在线视频| 欧美午夜影院在线视频| 国产免费一区二区三区香蕉精| 精品国产欧美一区二区三区成人| 国产精品成人一区二区| 欧美激情视频三区| 亚洲人成电影网站色xx| 久久91精品国产91久久久| www.亚洲一二| 亚洲自拍偷拍第一页| 日韩精品中文字幕有码专区| 亚洲一区二区三区四区视频| 91社影院在线观看| 国产福利精品av综合导导航| 欧美电影第一页| 亚洲欧洲中文天堂| 亚洲视频免费一区| 久久久噜噜噜久久中文字免| 国产一区二区美女视频| 国产精品久久久久久av福利软件| 欧美日韩亚洲系列| 色噜噜狠狠色综合网图区| 久久青草福利网站| 韩曰欧美视频免费观看| 欧美极品少妇xxxxⅹ裸体艺术| 国产亚洲精品美女久久久久| 久久国产加勒比精品无码| 91亚洲精品一区二区| 欧美高跟鞋交xxxxxhd| 欧美性猛交xxxx黑人猛交| 国产精品网址在线| 国产91久久婷婷一区二区| 国产啪精品视频网站| 国产精品视频一| 亚洲人成欧美中文字幕| 国产精品白嫩美女在线观看| 国产成人免费91av在线| 日本不卡高字幕在线2019| 亚洲欧美综合精品久久成人| 久久福利视频导航| 北条麻妃一区二区在线观看| 久久国产加勒比精品无码| 亲爱的老师9免费观看全集电视剧| 日韩日本欧美亚洲| 97久久精品人人澡人人爽缅北| 久久久久久国产免费| 欧美日本高清一区| 91在线播放国产| 97avcom| 国外成人在线播放| 成人午夜激情免费视频| 国产精品美女无圣光视频| 91精品国产综合久久久久久蜜臀| 欧美一级视频在线观看| 欧美丰满片xxx777| 在线视频欧美日韩精品| 亚洲码在线观看| 8090理伦午夜在线电影| 日韩www在线| 日韩av成人在线观看| 日韩精品高清在线观看| 国产精品私拍pans大尺度在线| 亚洲国模精品私拍| 欧美巨乳在线观看| 在线看福利67194| 97色在线观看免费视频| 国产一区二区三区视频在线观看| 久久精品2019中文字幕| 色系列之999| 中文字幕在线观看亚洲| 国产日韩精品在线观看| 国产精品九九九| 欧美在线观看一区二区三区| 亚洲欧美日韩精品久久亚洲区| 日韩亚洲欧美成人|