Nodejs Clauster入門入門入門入門

1171 ワード

前言
単一ノードjsの例は、単一スレッド環境で実行される.マルチコアCPU環境をより良く利用するために、ユーザは時々、ロードのためにNode.jsプロセスを開始したいと考えています.
手っ取り早い
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
 
if (cluster.isMaster) {
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
    //     
    
} else {
    require("./app.js");
}
負荷バランス
クライアント要求を処理するために複数のworkerを起動することができることが見られます.しかし,この多プロセスのモデルには明らかな問題がある.
  • 以上のプロセスの間でacceptとの接続が競争され、驚きの現象が発生し、効率が比較的低い.
  • 新しい接続を制御できないので、どのプロセスが出てくるかは、各ワーカープロセス間の負荷が非常に不均衡になるに違いない.
  • これは、いわゆる 現象であり、単純には、マルチスレッド/マルチプロセスは同じsocketイベントを待っており、このイベントが発生すると、これらのスレッド/プロセスは同時に起動され、 である.効率が低く、多くのプロセスがカーネルによって再スケジュールされて呼び覚まされ、同時にこのイベントに応答します.もちろん一つのプロセスだけが成功し、他のプロセスが再びイベントを処理してからスリープ状態に戻ります.このような性能の浪費現象は驚くべき群体である.
    原理
    各ワーカープロセスはchild_を使うことによってprocess.fork関数は、IPCに基づいてmasterプロセス間通信を実現します.forkのサブプロセスは親プロセスと一致するデータ空間、スタックなどの資源を持ち、独立しており、プロセス間にメモリ空間が共存できない.ところでなぜclusterを使う必要がありますか?
    このような方式は多プロセスのみを実現し、多プロセスの実行は親子のプロセス通信、サブルーチンの管理、および負荷の均衡などにも関連しており、clusterはすでにカプセル化されている.
    refer
    https://cnodejs.org/topic/56e84480833b7c8a0492e20c