ホームページ  >  記事  >  PHPフレームワーク  >  Workerman はどのようにして高い同時実行性を実現するのでしょうか?

Workerman はどのようにして高い同時実行性を実現するのでしょうか?

(*-*)浩
(*-*)浩オリジナル
2019-12-05 10:21:364611ブラウズ

Workerman はどのようにして高い同時実行性を実現するのでしょうか?

同時実行の概念は曖昧すぎるため、ここでは同時接続数と同時リクエスト数という 2 つの定量化可能な指標を使用します。

同時接続数は、サーバーが現時点で維持している TCP 接続の数を指し、これらの接続でデータ通信があるかどうかは関係ありません。 (推奨調査: workman チュートリアル)

たとえば、メッセージ プッシュ サーバーは数百万のデバイス接続を維持する場合がありますが、接続上でのデータ通信がほとんどないため、このサーバーの負荷が高くなる可能性があります。はほぼ 0 であり、十分なメモリがある限り、接続を受け入れ続けることができます。

ビデオ コースの推奨事項 →: 「数千万のデータに対する同時実行ソリューション (理論と実践)」

同時リクエスト この数は通常 QPS (サーバーが 1 秒あたりに処理するリクエストの数) によって測定されますが、現時点でのサーバー上の TCP 接続の数はあまり重要ではありません。たとえば、サーバーにクライアント接続が 10 個しかなく、各クライアント接続に 1 秒あたり 1W のリクエストがある場合、サーバーは少なくとも 10*1W=10W の 1 秒あたりのスループット (QPS) をサポートできる必要があります。

1 秒あたり 10W のスループットがこのサーバーの制限であると仮定します。各クライアントが 1 秒あたり 1 つのリクエストをサーバーに送信する場合、このサーバーは 10W クライアントをサポートできます。

同時接続の数はサーバーのメモリによって制限されます。通常、24G メモリの Workerman サーバーは約 120W の同時接続をサポートできます。

同時リクエストの数は、サーバーの CPU 処理能力によって制限されます。24 コアの Workerman サーバーは、1 秒あたり 45 W (QPS) のスループットを達成できます。実際の値は、ビジネスの複雑さと状況によって異なります。コードの品質です。

高同時実行シナリオでは、event または libevent 拡張機能をインストールする必要があります。さらに、Linux カーネル、特にプロセスによって開かれるファイル数の制限を最適化する必要があります。

ストレス テスト データ

ここでは、労働者ストレス テストの QPS データ参照のみを提供します。

テスト環境:

システム: debian 6.0 64-bit

メモリ: 64G

cpu: Intel( R ) Xeon(R) CPU E5-2420 0 @ 1.90GHz (物理 CPU 2 個、6 コア、2 スレッド)

Workerman: 200 Benchark プロセスを開始

ストレス テスト スクリプト :ベンチマーク

ビジネス: hello 文字列の送受信

通常の PHP (バージョン 5.3.10) ストレス テスト

短い接続 (各リクエストごとに接続を閉じる)完了後、次回新しい接続の確立を要求します):

条件: ストレス テスト スクリプトは、500 人の同時ユーザーをシミュレートするために 500 個の同時スレッドを開き、各スレッドは Workerman に 10W 回接続し、各接続は 1 つのリクエストを送信します

結果: スループット: 2.3W/S、CPU 使用率: 36%

#長い接続 (各リクエスト後に接続は閉じられず、次のリクエストでは引き続きこの接続が再利用されます) ):

条件: ストレス テスト スクリプトは、2000 人の同時ユーザーをシミュレートするために 2000 の同時スレッドを開き、各スレッドは Workerman に 1 回接続し、各接続は 10W のリクエストを送信します

結果: スループット: 36.7W/S、CPU 使用率: 69%

メモリ: 各プロセス メモリは 6444K で安定しており、メモリ リークはありません

上記は、php5.3 バージョンのストレス テスト データです。 php7 にすると、パフォーマンスは再び約 40% 向上します。

HHVM 環境ストレス テスト

短い接続 (各リクエストが完了したら接続を閉じ、次回リクエストが完了したときに新しい接続を確立します) made):

条件: ストレス テスト スクリプトは 1000 人の同時スレッドを開き、1000 人の同時ユーザーをシミュレートします。各スレッドは Workerman に 10W 回接続し、各接続は 1 つのリクエストを送信します。

結果:スループット: 3.5 W/S、CPU 使用率: 35%

長い接続 (各リクエスト後に接続は閉じられず、接続は次のリクエストで再利用され続けます):

条件: ストレス テスト スクリプトは 6000 で開かれ、同時スレッドは 6000 人の同時ユーザーをシミュレートし、各スレッドは Workerman に 1 回接続し、各接続は 10W リクエストを送信します。

結果: スループット: 45W/S、CPU 使用率: 67%# ##### メモリ: HHVM 環境の各プロセスのメモリは 46M で安定しており、メモリ リークはありません###

以上がWorkerman はどのようにして高い同時実行性を実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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