0

私が理解しているように、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 と何ら変わりはありません。もちろん、残りの部分は完全に異なりますが、私が見る限り、「スレッドロック コードを記述する必要がない」という議論はあまりプラスではありません。インメモリ変数として)。

4

3 に答える 3

2

への答え:

複数のコアで実行する場合、nodejs は「シングル スレッド」(マルチスレッド ロック コードなし) の利点をもたらしますか?

はい、各プロセスはまだシングルスレッドであるため、ノードはコードのロックを防ぎます。

node にはマルチスレッドはありません (javascript はシングルスレッドになるように設計されています)。マルチコアへのスケーリングには、それぞれが単一のスレッドを持つ複数のプロセスが含まれます。

したがって、並行して実行される複数のプロセスがありますが、それらは独自のプロセス空間を持つ個別のプロセスであるため、マルチスレッドプロセスの場合と同じようにロックに関する問題はありません。プロセス間の通信は、ハンドルを介して IPC を使用します。Node ではすべての IO がノンブロッキングであるため、子プロセスが I/O を待機している間、他のプロセスは実行を継続し、データを受信できます。

于 2013-05-24T04:32:27.440 に答える
0

JavaScript は常に単一のスレッドで実行されます。JavaScript にはマルチスレッド コードなどはありません。負荷の高いコンピューティングには適していませんが、IO ベースの操作には適しています。イベント ベースであるためです。たとえば、IO アクセスが進行中の場合、スレッドは自由に他の要求/操作を処理できます。そのため、多くの「同時」接続を適切に処理できます。

于 2013-05-24T04:32:35.767 に答える