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