【プロジェクト戦闘】Reactorの動作モードの紹介

1. Reactor 設計パターンとは何ですか?

  • イベント駆動型のデザインパターン。

Reactor フレームワークは、ACE のさまざまなフレームワークの中で最も基本的なフレームワークであり、Reactor フレームワークは他のフレームワークでも多かれ少なかれ使用されています。

イベント駆動型アプリケーションでは、1 つ以上のクライアントのサービス要求が逆多重化され、アプリケーションにディスパッチされます。イベント駆動型アプリケーションでは、同時に受信した複数のサービス要求が同期的かつ順次処理されます。
I/O ハンドル、Event_Handler クラスはこれらのハンドルを保持し、リアクター クラスはイベント ループを提供します: handle_events()。イベント ループのコード実装では、オペレーティング システムによって提供される多重化解除関数 (select など) が使用され、これらの多重化解除機能が使用されます。機能 複数のハンドルを同時に待機できるのが特徴 待機中はスレッドがサスペンド状態となり、CPU時間を消費しない 特定のハンドルがトリガーされるとスレッドが起動される, 関数は戻り、スレッドは次のコードを実行できます。逆多重化関数のこの機能は、アクティブ化されたハンドルに対応する特定のイベントに従って、関連するイベント処理関数を呼び出します。イベントループを実装することができます。

Reactor パターンは、サービス リクエストを同時に配信する 1 つ以上のクライアントを処理するイベント設計パターンです。リクエストが到着すると、サービス ハンドラーは I/O 多重化戦略を使用し、これらのリクエストを関連するリクエスト ハンドラーに同期的にディスパッチします。

2、Reactorモードの実装

Reactor モードを実装するには 3 つの方法があります

2.1 Single Reactor シングルスレッド モデル

Reactor オブジェクトとスレッドは 1 つだけあり、すべてのクライアント要求は処理のためにこのスレッドにディスパッチされます。

2.2 単一リアクターのマルチスレッド モデル

Reactor オブジェクトは 1 つだけですが、複数のスレッドがあり、クライアントのリクエストは処理のためにスレッドの 1 つにディスパッチされます。

2.3 マスター/スレーブ Reactor マルチスレッド モデル

Reactor オブジェクトには、マスター Reactor オブジェクトとスレーブ Reactor オブジェクトの 2 つがあり、マスター Reactor オブジェクトはクライアントの接続リクエストの受信を担当し、スレーブ Reactor オブジェクトはクライアントのビジネス リクエストの処理を担当します。複数のクライアント接続はマスター Reactor オブジェクトを共有し、各クライアント接続はビジネス リクエストを処理するための独立したスレーブ Reactor オブジェクトを持ちます。

3. Reactorモードの役割構成

Reactor モードの役割構成は次のとおりです。

3.1 ハンドル (ハンドルまたはディスクリプタ)

本質的に、これはオペレーティング システムによって提供されるリソースを表します。このリソースはイベントを 1 つずつ表すために使用され、イベントは外部からまたは内部から送信されます。クライアント接続要求などの外部イベントが送信されます。クライアントデータなどによる、オペレーティングシステムによって生成されるタイミングイベントなどの内部イベントなど。これは本質的にファイル記述子であり、Handle はイベントのソースです。

3.2 同期イベントデマルチプレクサ(同期イベントセパレータ)

これは本質的にはシステム コールであり、イベント (イベントは 1 つ以上の場合があります) の発生を待つために使用されます。

3.3 イベントハンドラ(イベントハンドラ)

いくつかのコールバック メソッドまたはフック関数が定義され、ハンドル上でイベントが発生すると、イベント処理メカニズムであるコールバック メソッドが実行されます。

3.4 具象イベントハンドラ(固有イベントハンドラ)

イベント ハンドラーが実装され、特定のビジネス ロジックがコールバック メソッドに実装されます。Reactor ロールでもある初期ディスパッチャーは、イベント ハンドラーを登録、削除、転送するためのメソッドを提供します。同期イベント デマルチプレクサは、ハンドルでイベントが発生したことを検出すると、特定のイベント ハンドラのコールバック メソッドを呼び出すように開始ディスパッチャに通知します。

おすすめ

転載: blog.csdn.net/wstever/article/details/129888901