0

ノードに 2 つのスレッドがあり、1 つはメイン コードを実行し、もう 1 つはすべてのコールバックを実行する場合、コールバックがリソース/時間を集中的に使用する場合、ブロックが発生する可能性があります。

100,000 人の同時ユーザーがいて、ノード アプリへの各クライアント リクエストが複雑で時間のかかるデータベース クエリを実行するとします (キャッシュが行われないと仮定して)。その後のユーザーは、クエリが返されるのを待っているときにブロックを経験しますか?

function onRequest(request, response) {
  //hypothetical database call
  database.query("SELECT * FROM hugetable", function(data) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("database result: " + data);
    response.end();
  });      
}

http.createServer(onRequest).listen(8888);

各コールバックが独自のスレッドで実行できる場合、これは問題ではありません。しかし、すべてのコールバックが単一の個別の専用スレッドで実行される場合、そのようなシナリオではノードはあまり役に立ちません。

4

1 に答える 1

0

この良い記事を読んでください: http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ 複数のスレッドはなく、node.js ロジックを実行するスレッドは 1 つだけです。(舞台裏の I/O は、アプリケーション ロジックでは考慮しないでください)

データベースへのリクエストも非同期です - あなたがすることは、dbソケットに転送するためにクエリをキューに入れることだけです.アプリケーションロジック。

于 2013-07-05T15:54:16.383 に答える