1. イベント処理モデル
ネットワーク接続でのメッセージ処理は、次の 2 つのフェーズに分類できます。
- メッセージの準備ができるまで待ちます
- メッセージ処理
イベント処理モデルを使用すると、コードを構造化してモジュール化し、保守と拡張を容易にすることができます。同時に、イベント ハンドラーはメイン スレッドをブロックせずにイベントを非同期に処理できるため、イベント処理モデルはプログラムの同時実行性と応答性も向上させることができます。
2. 原子炉モデル
1.リアクターとは
Reactor は、同期 IO 用のイベント駆動型メカニズムです。プログラムが複数のクライアント要求を同時に処理できるように、I/O 操作の同時処理を単一のスレッドから分離します。
Reactor モデルでは、メイン スレッドは、新しい接続リクエストを受信し、これらのリクエストをメイン スレッドで直接処理するのではなく、処理のために別のハンドラーに転送する役割を果たします。
- 中心的なアイデアは、メイン スレッド/プロセスがマルチプレクサ上でブロックされている間に、中央の IO マルチプレクサ上で処理されるすべての IO イベントを登録することです。
- IO イベントが到着するか準備が完了すると、マルチプレクサは事前に登録されている対応する IO イベントを返し、対応するプロセッサに配布します。
Reactor モデルの 3 つの重要なコンポーネント:
- マルチプレクサ: オペレーティング システムによって提供されます。通常、Linux では選択、ポーリング、epoll およびその他のシステム コールが行われます。
- イベントディストリビュータ: マルチプレクサで返された準備完了イベントを対応する処理機能に配信します。
- イベントハンドラー: 特定のイベントの処理を担当するハンドラー関数
2. リアクターの利点
利点は次のとおりです。
- 応答が速く、Reactor 自体はまだ同期していますが、単一の同期イベントをブロックする必要はありません。
- プログラミングは比較的単純なので、複雑なマルチスレッドと同期の問題を最大限に回避し、マルチスレッド/プロセスの切り替えオーバーヘッドを回避できます。
- スケーラビリティ。Reactor インスタンスの数を増やすことで、CPU リソースを簡単に最大限に活用できます。
- 再利用性、リアクターフレームワーク自体は特定のイベント処理ロジックとは無関係であり、再利用性が高い
Reactor モデルの開発効率は、IO 多重化を直接使用する場合よりも高くなります。通常はシングルスレッドです。設計の目標は、単一のスレッドが CPU のすべてのリソースを使用できるようにすることです。ほとんどの場合、共有リソースは使用できます。各イベント処理では無視されます。相互排他的アクセスです。
3. プロクターモデル
1.プロアクターとは
Proactor は、非同期 IO 操作のパフォーマンスと保守性を向上させることを目的とした同時プログラミング パターンです。プロアクター モードでは、オペレーティング システムが IO 操作の管理を担当し、アプリケーションは IO イベントを処理するコールバック関数を定義するだけで済みます。
- すべての IO 操作は、システムが提供する非同期 IO インターフェイスによって実行され、ワーカー スレッドはビジネス ロジックのみを担当します。
2. プロアクターのメリット
Proactor は、システム状態の読み取りと書き込みを最適化し、IO 並列機能を使用し、高性能シングルスレッド モデルを提供し、スレッドの切り替えを効果的に減らし、CPU の負担を軽減し、システムの同時実行性を向上させます。
- 効率: Reactor は、非同期かつノンブロッキングな方法で IO 操作を処理するため、多数の同時リクエストを効率的に処理できます。
- スケーラビリティ: Reactor の設計パターンは水平方向の拡張と垂直方向の拡張をサポートしており、必要に応じてサーバー ノードを動的に増減できます。
- 信頼性: イベント駆動型モードにより、Reactor は異常な状況に適切に対処し、システムの安定性と信頼性を確保できます。
- メンテナンスが簡単: Reactor は明確でシンプルなコード構造とモジュール設計パターンを採用しており、メンテナンスと変更が簡単です。
- クロスプラットフォーム: Reactor はさまざまなオペレーティング システムで優れた互換性があり、さまざまなプラットフォームで実行できます。
ゼロサウンドアカデミーの無料公開講座がおすすめ 個人的に先生の教え方が良かったと思うのでシェアしたいと思います。