5

OK、私は Node.js を学んでいますが、この待機モデルに頭を悩ませることができませんでした。The Node Beginner Bookを読んで学んでいます。その中には、ブロッキング操作と非ブロッキング操作に関するセクションがあります。私が理解していないのは、ノンブロッキング操作です。

コードは次のとおりです。

var exec = require("child_process").exec;

function start(response) {
  console.log("Request handler 'start' was called.");

  exec("ls -lah", function (error, stdout, stderr) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write(stdout);
    response.end();
  });
}

function upload(response) {
  console.log("Request handler 'upload' was called.");
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello Upload");
  response.end();
}

exports.start = start;
exports.upload = upload;

start 関数は exec と呼ばれ、exec は ls -lah を実行します。その後、コールバックは応答を待ちますよね? exec が "find /" を実行すると、私のコンピューターでは "find /" コマンドを完了するのに約 30 秒かかります。これはシングル スレッドであるため、ユーザー 1 が開始関数にアクセスすると、数ミリ秒以内にユーザー 2 も開始関数にアクセスします。その後、どうなりますか?ユーザー 1 は 30 秒で応答を受け取りますが、ユーザー 1 はまだ "find /" を実行しているため、ユーザー 2 は 1 分間待つ必要がありますか?

私の質問が初心者すぎる場合は申し訳ありません。読んでくれてありがとう!

4

1 に答える 1

4

node.js では、すべての I/O 操作が非同期で動作します。両方のfind操作が並行して実行されます。これを読んでみてください:node.jsイベントループを理解する.

于 2012-08-23T10:38:05.820 に答える