Working with TCP Sockets 読書メモ 第21章 イベント駆動(Reactor)

Working with TCP Sockets 読書メモ 目次

イベント駆動(Reactor)

概要

  • Reactorパターンに基づいたイベント駆動のパターンが最近流行している
    • 具体的な実装例はNginx, Node.js等
  • このパターンはシングルスレッド・シングルプロセスで、並列性を実現する
  • このパターンでは、コネクションのライフサイクルの各ステージを任意の順番で実行可能なイベントとして扱う
  • 中心となるマルチプレクサ(Reactor)がコネクションのイベントをモニターして処理を起動する
  • 流れは以下のようになる
  1. サーバはソケットでコネクションを待ち受ける
  2. 新しいコネクションを受け付けると、モニター対象ソケットのリストに追加する
  3. サーバは有効なコネクションを監視しつつ、ソケットをlistenする
  4. 有効なコネクションが読み込み可能になった通知を受け取ると、サーバはコネクションからデータを読み取り、必要なコールバックを実行する
  5. 有効なコネクションがまだ読み込み可能であるという通知を受け取ると、サーバはコネクションからデータを読み取り、再びコールバックを実行する
  6. サーバが新しいコネクションを受け付けたら、モニター対象ソケットのリストに追加する
  7. サーバが最初の接続が書き込み可能になったというイベントを受け取ったら、レスポンスが書き込まれる

実装

考察

  • 利点:非常に高性能(数千〜数万コネクションを並列処理可能)
  • 欠点:特殊なプログラミングモデル(Reactorは絶対にブロックしてはならない)

“Working with TCP Sockets 読書メモ 第21章 イベント駆動(Reactor)” への 1 件のフィードバック

コメントを残す