次のコラム workerman の使い方チュートリアル では、Workerman について知っておくべきいくつかの概念を紹介します。困っている友人の役に立てば幸いです。
#Workerman は、純粋に PHP で開発されたオープンソースの高性能 PHP ソケット サービス フレームワークです。これは MVC フレームワークではなく、より低レベルでより一般的なソケット サービス フレームワークであり、tcp エージェント、ラダー エージェント、ゲーム サーバー、メール サーバー、および ftp サーバーの開発に使用できます。
実際、Workerman は nginx の PHP バージョンに似ており、コアもマルチプロセス Epoll ノンブロッキング IO です。各 Workerman プロセスは數(shù)萬の同時接続を維持できます。メモリ上に常駐するため、Apache、nginx、php-fpmなどのコンテナに依存せず、超高性能です。
TCP、UDP、UNIXSOCKET、長時間接続、Websocket、HTTP、WSS、HTTPS およびその他の通信プロトコル、およびさまざまなカスタム プロトコルをサポートします。タイマー、非同期ソケット クライアント、非同期 Mysql、非同期 Redis、非同期 HTTP、非同期メッセージ キューなど、多くの高性能コンポーネントが含まれています。
まず、いくつかの核となる概念を理解する必要があります、1. マルチプロセス 2. Epoll 3. ノンブロッキング IO
1. マルチプロセス:
まず、プロセスとは何ですか? プロセスには、プロセスに割り當(dāng)てられたコード、データ、リソース (メモリ) が含まれます。直感的に言えば、プロセスはコンピュータの PID です。システム。オペレーティング システムは、外部プロセスによる干渉からプロセス空間を保護(hù)します。つまり、あるプロセスが別のプロセスのメモリにアクセスすることはできません。
プロセス間で通信する必要がある場合、オペレーティング システムを使用してプロセス間通信メカニズムを提供できます。通常、実行可能ファイルを?qū)g行すると、オペレーティング システムはそのファイルを?qū)g行するためのプロセスを作成します。
ただし、実行ファイルがマルチプロセス設(shè)計に基づいている場合、オペレーティング システムは元のプロセス上に複數(shù)のプロセスを作成します。これらのプロセス間で実行されるコードは同じですが、実行結(jié)果は同じになる可能性があります。 . 違うかもしれません。
なぜ複數(shù)のプロセスが必要なのでしょうか? 最も直感的なアイデアは、オペレーティング システムがマルチコアをサポートしている場合、実行可能ファイルは、マルチコアでなくても、あるプロセスが I/O 操作を待機(jī)している間、別のコアで実行できるということです。プロセスは CPU 上でも実行できます。CPU 上で実行すると、CPU 使用率とプログラム効率が向上します。
Linux システムでは、fork() を使用して親プロセス內(nèi)に子プロセスを作成できます。プロセスが fork() を呼び出した後、システムはまずストレージ データやコード スペースなどのリソースを新しいプロセスに割り當(dāng)てます。その後、元のプロセスのすべての値とステータスが新しいプロセスにコピーされ、いくつかの値だけが元のプロセスと異なり、異なるプロセスを區(qū)別します。
fork() 関數(shù)は、親プロセスに 1 回 (子プロセスの PID またはフォーク失敗情報を返す)、子プロセスに 1 回 (0 を返す) の 2 回戻ります。この時點(diǎn)で、2 つのプロセスは分離され、それぞれがシステム內(nèi)で実行されました。
2. ノンブロッキング IO:
まず IO とは何か、つまり入出力の動作です。ネットワーク IO の本質(zhì)はソケットの読み取りであり、Linux システムではソケットはストリームとして抽象化されており、IO は対流操作として理解できます。 IO アクセス (例として読み取り) の場合、データはまずオペレーティング システム カーネルのバッファにコピーされ、次にオペレーティング システム カーネルのバッファからアプリケーション プログラムのアドレス空間にコピーされます。
したがって、読み取り操作が発生すると、次の 2 つの段階を経ます。
最初の段階 (データの待機(jī)): データの準(zhǔn)備ができるのを待機(jī)します (データが準(zhǔn)備されるのを待機(jī)します)。準(zhǔn)備ができて)。
第 2 段階 (データのコピー): カーネルからプロセスへのデータのコピー(カーネルからプロセスへのデータのコピー)
ソケット ストリーム (つまり IO) の場合、
最初のステップ: 通常、データ パケットがネットワークに到著し、カーネル內(nèi)のバッファにコピーされるのを待機(jī)します。
ステップ 2: カーネル バッファからアプリケーション プロセス バッファにデータをコピーします。
ネットワーク IO モデルは大まかに次のとおりです。
同期モデル (同期 IO)
ブロッキング IO (ブロッキング IO) ) リソースが利用できない場合、IO リクエストはフィードバック結(jié)果 (データまたはタイムアウト) が得られるまでブロックされます。 Linux では、デフォルトですべてのソケットがブロックされますが、IO ブロックの特徴は、IO 実行の両方の段階 (データの待機(jī)とデータのコピー) でブロックされることです。
ノンブロッキング IO (ノンブロッキング IO) リソースが利用できない場合、IO リクエストは終了して戻ります。戻りデータは、リソースが利用できないことを示します。 Linux では、データの準(zhǔn)備ができていなくてもユーザー プロセスはブロックされず、カーネルはすぐにプロセスに戻り、このコマンドをすぐに満たすことができないことを示します (EAGAIN または EWOULDBLOCK)。したがって、ノンブロッキングはポーリングを使用して実現(xiàn)されます。
IO の多重化 (多重化 IO) IO の多重化は、select、poll、epoll と呼ばれるもので、この IO 方法はイベント駆動型 IO と呼ばれることもあります。 select/epoll の利點(diǎn)は、単一のプロセスで複數(shù)のネットワーク接続の IO を同時に処理できることです。
その基本原理は、select、poll、および epoll の関數(shù)が、擔(dān)當(dāng)するすべてのソケットを継続的にポーリングすることです。データが特定のソケットに到著すると、ユーザー プロセスに通知されます。 IO多重化モデルでは、実際には各ソケットはノンブロッキングに設(shè)定されるのが一般的です。
ただし、実際には、ユーザーのプロセス全體が常にブロックされます。プロセスがソケット IO によってブロックされるのではなく、select 関數(shù)によってブロックされるだけです。したがって、IO 多重化は、select や epoll などのシステム コールではブロックされますが、recvfrom などの実際の I/O システム コールではブロックされません。
シグナル駆動 IO (シグナル駆動 IO)
非同期 IO (非同期 IO) ユーザー プロセスは読み取り操作を開始した後、すぐに他の処理を開始できます。 。一方、カーネルの観點(diǎn)から見ると、非同期読み取りを受信するとすぐに返されるため、ユーザー プロセスにブロックが発生することはありません。
その後、カーネルはデータの準(zhǔn)備が完了するのを待ち、データをユーザー メモリにコピーします。これがすべて完了すると、カーネルはユーザー プロセスにシグナルを送信して、次のことを伝えます。読み取り操作が完了します。
3. Epoll : epoll は理解しやすくなりました。epoll は、ファイル記述子の大きなバッチを処理するために Linux カーネルによって作成された改良されたポーリングです。Linux における多重化された IO です。インターフェイス選択/ポーリングの拡張バージョン。多數(shù)の同時接続のうち少數(shù)のアクティブな接続のみがアクティブである場合に、プログラムのシステム CPU 使用率を大幅に向上させることができます。
PS. いくつかの注意點(diǎn):
1: IO 多重化は同期ブロッキング モデルですか、それとも非同期ブロッキング モデルですか?
同期ではメッセージ通知をアクティブに待機(jī)する必要がありますが、非同期ではメッセージ通知を受動的に受信し、コールバック、通知、ステータスなどを通じてメッセージを受動的に取得する必要があります。 IO が選択ステージまでブロックを多重化する場合、ユーザー プロセスはアクティブに待機(jī)し、選択関數(shù)を呼び出してデータ準(zhǔn)備完了ステータス メッセージを取得し、そのプロセス ステータスはブロックされます。したがって、IO 多重化は同期ブロッキング モードとして分類されます。
2: 同時実行性とは何ですか? 同時実行性が高い狀態(tài)とはどのような狀態(tài)ですか?
高度な同時実行プログラムでは、通常、マルチスレッド同期ブロッキング方式ではなく、同期非ブロッキング方式が使用されます。これを理解するには、まず同時実行と並列処理の違いを見てください。つまり、同時実行數(shù)は同時に実行されるタスク (同時に処理される HTTP リクエストなど) の數(shù)を指し、並列數(shù)は同時に動作できる物理リソースの數(shù)を指します。同時に(CPU コアの數(shù)など)。
タスクのさまざまな段階を適切にスケジュールすることで、同時実行數(shù)が並列度よりもはるかに大きくなる可能性があります。これが、數(shù)個の CPU で數(shù)萬のユーザーの同時リクエストをサポートできる秘密です。このように同時実行性が高い狀況では、タスク (ユーザー要求) ごとにプロセスまたはスレッドを作成すると、非常にコストがかかります。同期ノンブロッキング方式では、複數(shù)の IO リクエストをバックグラウンドにスローできるため、1 つのプロセスで多數(shù)の同時 IO リクエストに対応できます。
以上がWorkerman で知っておくべきいくつかの概念の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

Workerman ドキュメントでファイルのアップロードとダウンロードを?qū)g裝するには、特定のコード サンプルが必要です はじめに: Workerman は、シンプル、効率的、使いやすい高性能 PHP 非同期ネットワーク通信フレームワークです。実際の開発では、ファイルのアップロードとダウンロードが一般的な機(jī)能要件となりますが、この記事では、Workerman フレームワークを使用してファイルのアップロードとダウンロードを?qū)g裝する方法と、具體的なコード例を紹介します。 1. ファイル アップロード: ファイル アップロードとは、ローカル コンピューター上のファイルをサーバーに転送する操作を指します。以下が使用されます

Swoole と Workerman はどちらも高性能の PHP サーバー フレームワークです。 Swoole は、非同期処理、優(yōu)れたパフォーマンス、スケーラビリティで知られており、多數(shù)の同時リクエストと高スループットを処理する必要があるプロジェクトに適しています。 Workerman は、使いやすさや同時実行量が少ないプロジェクトに適した直感的な API を備え、非同期モードと同期モードの両方の柔軟性を提供します。

Workerman ドキュメントの基本的な使用方法の実裝方法の紹介: Workerman は、開発者が同時実行性の高いネットワーク アプリケーションを簡単に構(gòu)築できるようにする高性能 PHP 開発フレームワークです。この記事では、インストールと構(gòu)成、サービスとリスニング ポートの作成、クライアント リクエストの処理など、Workerman の基本的な使用方法を紹介します。そして、対応するコード例を示します。 1. Workerman のインストールと構(gòu)成 コマンド ラインに次のコマンドを入力して、Workerman をインストールします。

Workerman ドキュメントにタイマー機(jī)能を?qū)g裝する方法 Workerman は、タイマー機(jī)能を含む豊富な機(jī)能を提供する強(qiáng)力な PHP 非同期ネットワーク通信フレームワークです。タイマーを使用して、指定された時間間隔內(nèi)でコードを?qū)g行します。これは、スケジュールされたタスクやポーリングなどのアプリケーション シナリオに非常に適しています。次に、Workerman でタイマー機(jī)能を?qū)g裝する方法と具體的なコード例を詳しく紹介します。ステップ 1: Workerman をインストールする まず、Worker をインストールする必要があります

Workerman 開発: UDP プロトコルに基づくリアルタイム ビデオ通話 概要: この記事では、Workerman フレームワークを使用して、UDP プロトコルに基づくリアルタイム ビデオ通話機(jī)能を?qū)g裝する方法を紹介します。 UDP プロトコルの特性を深く理解し、コード例を通じて、シンプルだが完全なリアルタイム ビデオ通話アプリケーションを構(gòu)築する方法を示します。はじめに: ネットワーク通信において、リアルタイムのビデオ通話は非常に重要な機(jī)能です。従來の TCP プロトコルでは、リアルタイム性の高いビデオ通話を?qū)g裝する場合、伝送遅延などの問題が発生する可能性があります。そしてUDP

Workerman ドキュメントでリバース プロキシ機(jī)能を?qū)g裝するには、具體的なコード例が必要です はじめに: Workerman は、豊富な機(jī)能と強(qiáng)力なパフォーマンスを提供する高性能 PHP マルチプロセス ネットワーク通信フレームワークであり、Web のリアルタイム通信や長時間の通信で広く使用されています。接続、サービス シナリオ。このうち、Workermanはリバースプロキシ機(jī)能もサポートしており、サーバーが外部サービスを提供する際の負(fù)荷分散や靜的リソースのキャッシュを?qū)g現(xiàn)できます。この記事ではWorkermanを利用してリバースプロキシ機(jī)能を?qū)g裝する方法を紹介します。

Workerman を使用して高可用性ロード バランシング システムを構(gòu)築する方法には、特定のコード サンプルが必要です?,F(xiàn)代のテクノロジーの分野では、インターネットの急速な発展に伴い、大量の同時リクエストを処理する必要がある Web サイトやアプリケーションがますます増えています。高可用性と高性能を?qū)g現(xiàn)するために、負(fù)荷分散システムは不可欠なコンポーネントの 1 つになっています。この記事では、PHP オープン ソース フレームワーク Workerman を使用して高可用性負(fù)荷分散システムを構(gòu)築する方法を紹介し、具體的なコード例を示します。 1. ワーカーマンワークの紹介

Workerman は、PHP をベースに開発された高性能な非同期イベント ドリブン フレームワークで、TCP/UDP プロトコルでの長時間接続の開発を容易に実現(xiàn)できます。さらに、Workerman はファイル転送を?qū)g現(xiàn)する機(jī)能も提供しており、大規(guī)模なファイル転送やデータのバックアップなどのシナリオで使用できます。この記事では、Workerman にファイル転送機(jī)能を?qū)g裝する方法と具體的なコード例を紹介します。 1. ファイルアップロード機(jī)能 ファイルアップロード機(jī)能を?qū)g裝するには、クライアントがアップロードするファイルをサーバーに送信し、サーバーがそれを検証する必要があります。
