「リーダー/フォロワー」パターンについて、分かりやすくわかりやすい説明が見つからないようです。すべての説明は、以下のように全く意味をなさないものです。1。
誰か説明できますか?メカニックこのパターンがどのように機能するか、また、従来の非同期 IO モデルに比べてパフォーマンスが向上する理由と方法について教えてください。例や図へのリンクも歓迎します。
ベストアンサー1
ご存知のとおり、このパターンは、ThreadPool、HandleSet、Handle、ConcreteEventHandler (EventHandler インターフェイスを実装) の 4 つのコンポーネントで構成されています。
夜のタクシー乗り場のようなもので、リーダー以外の運転手は全員寝ています。ThreadPool は、多数のスレッド (タクシー) を管理するステーションです。
リーダーは、ドライバーがクライアントを待機するのと同じように、HandleSet 上の IO イベントを待機しています。
クライアントが到着すると (IO イベントを識別するハンドルの形式で)、リーダー ドライバーは別のドライバーを起動して次のリーダーにし、パッセンジャーからの要求に応えます。
リーダーがクライアントを指定されたアドレスまで運んでいる間 (ConcreteEventHandler を呼び出して、それに Handle を渡します)、次のリーダーは同時に別の乗客にサービスを提供できます。
運転手は仕事を終えると、タクシーを駅まで戻し、駅が空いていなければ眠りにつく。そうでない場合は、運転手がリーダーになる。
このパターンの利点は次のとおりです。
- スレッド間の通信は必要なく、同期も共有メモリ (ロック、ミューテックス) も必要ありません。
- 他のEventHandlerに影響を与えずに、さらにConcreteEventHandlerを追加できます。
- 複数のスレッドによりレイテンシを最小限に抑えます
欠点は次のとおりです。
- 複雑な
- ネットワークIOがボトルネックになる可能性がある