2

パフォーマンスの違いを測定するためだけに、ブロッキングと非ブロッキングの方法で記述された、同じことを行う 2 つの小さな node.js スニペットを作成しました。ここに行きます:

ノンブロッキング (従来の node.js の方法):

var http = require('http');
var fs = require('fs');

var app = http.createServer(function(req, res){
  fs.readFile('lorem.txt',function(err, data){
    res.end(data);
  });
});

app.listen(8080);

ブロッキング:

var http = require('http');
var fs = require('fs');

var app = http.createServer(function (req, res) {
  res.end(fs.readFileSync('lorem.txt'));
});

app.listen(8080);

lorem.txtサイズが約 33kb の単なるテキスト ファイルです。

両方に対して実行apache benchmarkしても違いは見られないか、ブロッキング バージョンのパフォーマンスが向上する場合があります。

ab -n 100 -c 10 http://locahost:8080/

ブロッキング:Time per request: 5.701 ms
ノンブロッキング:Time per request: 8.401 ms

4

1 に答える 1

4

非同期メソッドは、より広い意味でパフォーマンスが向上します。つまり、より多くの (多数の) 同時要求に対する応答時間が短くなります。

あなたが行ったベンチマークはコーナーケースです。同時リクエストの数を増やすか、返されるレスポンスのサイズを増やすとします。同期メソッドはうまく機能しないと確信しています。同期方式は、応答が小さいため良くありませんが、スケーラビリティがまったくないため良くありません。平均的な現代のコンピューターは、このような規模の読み取り/書き込みを簡単に処理できます。filesze を 1MB に増やすとどうなりますか? または100万に要求しますか?ギガバイトのストレージを処理し、何百万ものリクエストに対応する必要があるサーバーについて考えてみてください。

node.js ie のコアコンセプトは、C10kasynchronous, non-blocking, event driven I/Oのようなスケーラビリティの問題を解決するために構築されています。あなたがたどり着いた結論は一方的なものです。現実の世界では非同期メソッドが 99% の確率で勝つと確信しています。

于 2013-05-15T15:24:07.670 に答える