2012-05-11 7 views
5

私の質問です二部:人々はトルネードを呼ん通常は「非同期サーバー」によってトルネードと非同期要求の取り扱い

  1. まさにそれが何を意味するのでしょうか?誰かが概念/定義を説明するための具体的な例を提供してもらえますか?

  2. トルネードの場合、「ノンブロッキング」とはどういう意味ですか?これは上記の非同期性に関連していますか?また、すべての要求を処理するために常に1つのスレッドを使用するどこかで読んでいます。これは、要求が1つずつまたは並行して順次処理されることを意味しますか?後者の場合、どのように竜巻がそれをしますか?

答えて

10
  1. トルネードはthe C10K problemを解決するためにasynchronous, non-blocking I/Oを使用しています。これは、すべてのI/O操作がイベント駆動型であることを意味します。つまり、操作が戻るのを待つのではなく、コールバックとイベント通知を使用します。 Node.jsとNginxも同様のモデルを使用します。例外はブロックされているtornado.databaseです。 Tornado IOLoop sourceは、詳細を見たい場合は十分に文書化されています。具体的な例については、下記を参照してください。

  2. ノンブロッキングと非同期は、トルネードで互換的に使用されますが、他のケースでは違いがあります。 this answer gives an excellent overview。 Tornadoは1つのスレッドを使用し、要求を順番に処理しますが、IOを待つ時間がないため非常に迅速です。プロダクションでは、通常、複数のTornadoプロセスを実行します。

限り具体的な例として、あなたはトルネード(非同期)いくつかのデータを取得しに応答しなければならないHTTPリクエストを持っていると言う、ここでは何が起こるか(非常に大まか)です:

  1. トルネードを受け取りますアプリケーション内で適切なハンドラメソッドを要求して呼び出します。
  2. ハンドラメソッドは、コールバック付きの非同期データベースコールを行います。
  3. データベースコールが返され、コールバックが呼び出され、レスポンスが送信されます。

Tornado(Djangoと比較して)の違いは、手順2と3の間でプロセスが他の要求を処理し続けることです。 Tornado IOLoopはコネクションをオープンに保ち、コールバックキューの処理を継続しますが、Django(および任意の同期Webフレームワーク)ではスレッドはハングし、データベースが戻るのを待ちます。

+0

よく答える。 'イベント通知'と言うと、コールバックが呼び出されるようにI/O操作の完了を知らせるために生成されたイベントを意味しますか?他の種類のイベントはありますか?ありがとう! – skyork

+0

はい、私は、Tolladoがepollまたはkqueueを介して着信データを通知されたこと、つまりエッジ駆動の変更通知であることを意味します。 –

関連する問題