2011-10-05 9 views
11

同期モデルでは、クライアントがサーバに接続すると、クライアントとサーバの両方を同期させていくつかの操作を完了させる必要があります。Webサーバのプロクタパターンと同期モデルの違い

一方、非同期モデルでは、クライアントとサーバーを分離して独立して動作させることができます。クライアントは、接続の確立と何かを行う要求を送信します。サーバーが要求を処理している間、クライアントは別の処理を実行できます。操作が完了すると、完了イベントはイベントデマルチプレクサのキューに置かれ、Proactor(HTTPハンドラなど)がリクエストを送り返して完了ハンドラ(クライアント上)を呼び出すのを待ちます。これらの用語は、boost :: asio文書The Proactor Design Pattern: Concurrency Without Threadsのように使用されます。

このように動作させることで、非同期モデルは接続ごとにスレッドを作成せずに同時接続を受け付けることができ、全体的なパフォーマンスが向上します。非同期モデルと同じ効果を得るには、最初のモデル(同期)がマルチスレッドでなければなりません。詳細は、Proactor Patternを参照してください(実際には、その文書の非同期モデルに使用されているプロクタパターンを学習しています。ここでは、一般的な同期I/O Webサーバーの説明があります)。

私の理解は正しいですか?その場合、非同期サーバーは要求を受け入れて非同期で結果を返すことができます(最初の接続要求では、Webサーバー上のサービスは最初に応答する必要はありません)。本質的に、非同期モデルはスレッドを使用しません(または、Proactor、Asynchronous Event Multiplexer(boost :: asioドキュメント)コンポーネントなどの個々のコンポーネントでスレッドを使用します)。クライアント/サーバーアプリケーションスタック全体を作成するのではなく、 Proactor Patternドキュメントのマルチスレッドモデル、セクション2.2 - 一般的な同時実行モデルの一般的なトラップと落とし穴)。

+0

あなたが求めていることは私には分かりません。 –

答えて

12

Proactorモデルでは、ホスト名の解決、受け入れまたは接続、情報の一部の読み取りまたは書き込み、接続の切断などのサブタスクでネットワークセッションプロセスを分割することを前提としており、異なるセッションのサブタスクを切り替えることができます。一方、Reactorモデルはネットワークセッションプロセスを(ほとんど)単一のタスクと見なします。

絶対Proactorの利点は:

  • 性能があるため、タスク "アウトソーシング" のブーストされます。たとえば、解決要求をDNSに送信し、何もしない応答(Reactor)を待つか、待っている間に他の処理を行うことができます(Proactor)。

絶対Proactorの欠点は:

  • パフォーマンスがあるため、単一のセッションのためにあなたはそれがあるべきよりも多くのコード(Proactor)(原子炉)を実行することを意味し、タスク切り替えの減少しています。

しかし、全体的なパフォーマンスは、通常、期間ごとにいくつかの「満足」したクライアントで測定されます。したがって、ProactorとReactorの利点は状況によって異なります。ここにいくつかの例があります。

  1. HTTPサーバ。クライアントはブラウザウィンドウで何かを見たいと思う。彼は最初のテキストを見るためにページ全体が読み込まれるまで待つ必要はありません。部分的なページの読み込みがページ全体の読み込みより速いので、Proactorは効果的です。それでも、Reactorモデルとほぼ同じ時間にページ全体が読み込まれます。

  2. 低遅延ゲームサーバー。クライアントは、コマンドの完全な結果をできるだけ早く得たいと考えています。 Reactorは部分的な読み書きのようなサブタスクがないので効果的です。クライアントは完全な応答を読むまでは何も見ません。したがって、Reactorはサブタスクの間で追加の切り替えを行わず、Proactorはすべてのクライアントが予期せぬ時間お互いに待つように強制する一方で、一部のクライアントはコマンドを進めることを保証します。

マルチスレッド化では、どちらの場合でも線形加速が可能です。

+0

答えをありがとう。それが忘れられたと思った。 – Amumu

+2

この例は実際には真実ではありません。実際の使用方法やアプリケーションのシナリオによって異なります。 Pro-actorとRe-actorの最大の違いは、事前にネットワークオペレーションを行うことができます。たとえば、データが到着していないときに読み込むことができますが、データが到着すると読み取りが完了します。 (それがプロ俳優として名前を付ける理由です)。 Reactorでは、データが到着するなどの準備ができたら、messageRecv関数が呼び出されます。ビジネスロジックコードが要求に応答するためには、それらは実行する単一の機能にあり、リアクタと違いはありません – jean

関連する問題