目次
マスタープロセス
マネージャープロセス
Reactor スレッド
他のタスクを非同期に処理するプロセスで、使用方法はGearmanと同様です。
は、
swoole イベント アーキテクチャ図

スウールの構造解析

Aug 06, 2018 am 10:13 AM

この記事の内容は swoole のアーキテクチャ解析に関するものであり、一定の参考価値がありますので、困っている方は参考にしていただければ幸いです。

構造図は次のとおりです。

swoole は、主に Master プロセス (メイン プロセス) と Manager プロセスによって使用され、そのプロセスを完了します。機能。

マスタープロセス

はマルチスレッドプログラムです。 Reactor スレッドと呼ばれる非常に重要なスレッドのグループがあります。実際に TCP 接続を処理し、データを送受信するのはスレッドです。

マネージャープロセス

ワーカー/タスクプロセスを管理します。ワーカー/タスク プロセスはすべてフォークされ、Manager プロセスによって管理されます。

Reactor スレッド

新しい接続を受け入れた後、メイン スレッド (マスター プロセス) は固定の Reactor スレッドに接続を割り当て、このスレッドはソケットの監視を担当します。ソケットが読み取り可能なときにデータを読み取り、プロトコル分析を実行して、リクエストをワーカー プロセスに配信します。

  • #クライアント

    TCP接続の維持、ネットワークの処理IO、プロトコルの処理、データの送受信

  • 完全に

    非同期ノンブロッキング モード

  • Start/ を除くすべては C コードですシャットダウン イベント コールバックを除き、PHP コードは実行されません

  • TCP クライアントによって送信されたデータをバッファリングし、結合し、完全なリクエスト データに分割しますパッケージ

  • Reactorマルチスレッドで実行

作業プロセス

phpに似ています- fpmプロセス。

  • Reactor スレッドによって配信されたリクエスト パケットを受け入れ、PHP コールバック関数を実行してデータを処理します

  • 応答データを生成し、

    Reactor スレッドに送信します。このデータは、Reactor スレッドによって TCP クライアント # に送信されます。

  • ##はい、非同期モードまたは同期モードです
  • Worker

    マルチプロセス モードで実行します

  • TaskWorkerプロセス

他のタスクを非同期に処理するプロセスで、使用方法はGearmanと同様です。

  • Worker

    プロセスによって swoole_server->task/taskwait メソッドを通じて配信されたタスクを受け入れます

  • タスクを処理し、結果データ (
  • swoole_server->finish

    ) を Worker process

  • TaskWorker に返します。

    マルチプロセス モードで実行する

  • 関係

は、

Reactor

nginx、## であると理解できます。 #Workerphp-fpm です。 Reactorスレッドはネットワーク要求を非同期かつ並行して処理し、それを処理のためにWorkerプロセスに転送します(コールバック関数で処理されます)。 ReactorWorkerUnixSocket を通じて通信します。

イベント処理プロセス

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

リアクター モード

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

プロアクター モード

2 つの実装

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

ワークフロー:

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

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

  4. メインスレッドは epoll_wait を呼び出して、ソケットが書き込み可能になるのを待ちます。

  5. ソケットが書き込み可能になると、epoll_wait がメインスレッドに通知します。メインスレッドはリクエスト結果をソケットに書き込みます。

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

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

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

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

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

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

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

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

各モジュールの動作については、上記の構造の紹介を参照してください。

関連する推奨事項:

モデルをカスタマイズするにはどうすればよいですか? ThinkPHP3.2 カスタム基本クラス Model

PHP を使用して Excel ファイルの内容を読み取り、セル データを取得する方法

以上がスウールの構造解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles