swooleイベント処理プロセス

little bottle
リリース: 2023-04-06 11:56:01
転載
2536 人が閲覧しました

この記事の主な内容は swoole イベント処理プロセスの分析に関するものです。興味のある方はぜひ学んでください。この記事があなたのお役に立てれば幸いです。

swoole イベント処理プロセスを理解するには、まず 2 つのネットワーク イベント処理モードを理解します。

リアクター モード

メイン スレッド (I/O 処理ユニット) は、ファイル記述子にイベントがあるかどうかのみを監視し、イベントがある場合は直ちにワーカー スレッド/プロセスに通知する必要があります。イベントの(論理ユニット)。それ以外、メインスレッドは他の作業を行いません。データの読み取りと書き込み、新しい接続の受け入れ、顧客リクエストの処理はすべてワーカー スレッドで行われます。

プロアクター モード

2 つの実装

I/O 非同期モデルを使用してプロアクター モードを実装します。原則: すべての I/O 操作はメイン スレッドに渡され、メイン スレッドはカーネルと連携して処理し、ビジネス ロジック操作はロジック ユニットに渡されます。たとえば、これを実現するには aio_read を使用します。

ワークフロー:

  1. メインスレッドは、aio_read 関数を呼び出して、ソケット上の読み取り完了イベントをカーネルに登録します。
  2. メインスレッドは他の I/O イベントの処理を続けます。
  3. ソケット上のデータがユーザー バッファーに読み込まれると、カーネルはアプリケーション (論理ユニット) に信号を送信して、データが利用可能であることをアプリケーションに通知します。
  4. アプリケーションはデータ (クライアント要求) を読み取り、処理後、aio_write 関数を呼び出してソケット上の書き込みイベントをカーネルに登録します。
  5. メインスレッドは他のロジックの処理を続けます。
  6. ユーザー バッファー内のデータがソケットに書き込まれると、カーネルはアプリケーションに信号を送信して、データが送信されたことをアプリケーションに通知します。
  7. アプリケーションには、ソケットのクローズなどの後処理を処理する事前定義された信号処理関数があります。

I/O 同期モデルを使用して、プロアクター モードを実装します。原則: メインスレッドは I/O イベント データの読み取りおよび書き込み操作を実行し、ビジネス ロジック操作はロジック ユニットに引き渡されます。たとえば、これを実現するには epoll を使用します。

ワークフロー:

  1. メインスレッドは、ソケットの読み取り準備イベントを epoll カーネル イベント テーブルに登録します。
  2. メインスレッドは epoll_wait を呼び出して、ソケット上でデータが読み取られるのを待ちます。
  3. epoll_wait が戻った後、メインスレッドはソケットからデータを読み取り、読み取ったデータをリクエスト オブジェクト (クライアントのリクエスト) にカプセル化し、リクエスト キューに挿入します。
  4. したがって、キューのコンシューマ スレッドはリクエスト オブジェクトを処理し、ソケット上の書き込み準備完了イベントを epoll カーネル イベント テーブルに登録します。
  5. メインスレッドは epoll_wait を呼び出して、ソケットが書き込み可能になるのを待ちます。
  6. ソケットが書き込み可能になると、epoll_wait がメインスレッドに通知します。メインスレッドはリクエスト結果をソケットに書き込みます。

swoole イベント アーキテクチャ図

図からわかるように、Reactor スレッドと Work プロセスを組み合わせて次のように扱うと、ワーカー スレッドの場合、swoole はリアクター イベント処理モードを使用します。

リクエストが実行するステップは次のとおりです:

1. サーバーのメインスレッドはクライアントの接続を待ちます。

2. Reactor スレッドは、接続されたソケットを処理し、ソケット上のリクエスト データを読み取り (受信)、リクエストをカプセル化し、ワーク プロセスに渡します。

3. 作業プロセスは、ビジネス データを処理する論理単位です。

4. 作業プロセスの結果は Reactor スレッドに返されます。

5. Reactor スレッドは結果をソケットに書き込みます (送信)。

関連チュートリアル: swoole ビデオ チュートリアル

以上がswooleイベント処理プロセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート