私が理解しているように、NodeJS の利点の 1 つは、プロセスごとに 1 つのスレッドであることです。標準的なケースでは、並行性について心配する必要はありません。
また、マルチコア マシンでの NodeJS スケーリング (マルチコア マシンの Node.js ) についても読みました。
ワーカーは新しい接続を受け入れるために競合し、負荷の最も少ないプロセスが勝つ可能性が最も高くなります。これは非常にうまく機能し、マルチコア ボックスでスループットを非常にうまくスケールアップできます。
この場合、複数のスレッドが並行して実行されますか? もしそうなら、それはマルチスレッドコードを書かなければならないということではありませんか (複数のコアを使いたい場合) - もしそうなら、どうすればいいですか?
または、それらが並行して実行されない場合...複数のコアのブースト/利点はどこから来るのでしょうか?
編集:私の現在の理解
したがって、複数のコアに複数のプロセスが存在する場合がありますが、各プロセスには単一のスレッドしかありません。
例えば:
var io = require('socket.io').listen(81);
var connections = [];
io.sockets.on('connect', function (socket) {
console.log('connected...');
connections.push(socket);
socket.on('disconnect', function () {
console.log('disconnected');
connections.remove(socket);
});
});
レースのつながりはありません。単一のスレッドがあり、 の同時アクセスはありませんconnections
。異なるプロセスがある場合、各プロセスには独自の のコピーがありconnections
ます。したがって、大規模なチャットルームがある場合、複数のプロセスで負荷を分散することはできません。各プロセスは独自のチャットルームになります。
この点では、各 PHP スクリプトが独自の変数のコピーを持っているため、ロック コードを記述する必要がないという点で、PHP と何ら変わりはありません。もちろん、残りの部分は完全に異なりますが、私が見る限り、「スレッドロック コードを記述する必要がない」という議論はあまりプラスではありません。インメモリ変数として)。