ホームページ PHPフレームワーク Swoole Swoole 非同期プログラミングの実践: Web サービスのパフォーマンスを 10 倍向上させる

Swoole 非同期プログラミングの実践: Web サービスのパフォーマンスを 10 倍向上させる

Jun 13, 2023 pm 09:41 PM
非同期プログラミング Webサービスのパフォーマンス swoole

インターネットの急速な発展に伴い、Web開発に取り組む企業が増えており、Webサービスのパフォーマンスをいかに向上させるかが重要な課題となっています。近年、ネットワークのIO効率を向上させる技術として非同期プログラミングが徐々に普及しており、Swooleフレームワークは非同期プログラミングの代表的なものの1つです。この記事では、Swoole フレームワークを介して非同期プログラミングを実装する方法を紹介し、Web サービスのパフォーマンス向上におけるその大きな効果を実証します。

1. Swoole とは

Swoole は、高性能、非同期、同時ネットワーク通信フレームワークです。これにより、PHP 開発者は非同期コードを簡単に作成でき、コードの効率とパフォーマンスが向上します。 Swoole は、TCP/UDP/Unix ドメイン ソケット、HTTP サーバー、WebSocket サーバーに加え、非同期テキスト、JSON シリアル化および逆シリアル化機能を提供します。現在、Swoole はますます多くの PHP 開発者に支持されています。

2. Swoole を使用する際のいくつかの注意点

1. コルーチンの有効化:

Swoole では、非同期プログラミングをサポートするために、コルーチンを有効にする必要があります。コルーチンは、コンテキスト切り替えやカーネル モード リソースによる追加のオーバーヘッドがないため、スレッドよりも軽量なスケジューリング方法です。

Swoole の使い方 コルーチンを使うと非常に便利です。エントリーファイルまたは Swoole サーバーオブジェクトに次のコードを追加するだけです:

SwooleRuntime::enableCoroutine();
ログイン後にコピー

このようにして、コルーチン関数を使用することができます。スウール社から提供されました。

2. メモリ リークに注意する:

Swoole を非同期プログラミングに使用する場合は、メモリ リークに注意する必要があります。非同期プログラミングのコルーチンは長時間I/Oを待つことになるため、メモリの解放が間に合わないとメモリの無駄遣いが発生します。

Swoole は、コルーチン コンテキストをクリーンアップするメソッド Coroutine::defer() を提供します。これを使用して、コルーチンの最後にあるコンテキストをクリーンアップします (例:

SwooleCoroutineun(function () {
    echo "Coroutine Start
";
    Coroutine::defer(function () {
        echo "Coroutine End
";
    });
});
ログイン後にコピー

3)。Swoole のバージョンに注意してください:

Swoole の新しいバージョンは引き続き最適化されます。改良されたため、最新バージョンを使用する必要があります。同時に、コードの互換性と安定性を確保するために、各バージョンの変更に注意を払う必要があります。

3. Swoole の実践: Web サービスのパフォーマンスの向上

以下では、簡単な例を使用して、Swoole フレームワークを使用して Web サービスのパフォーマンスを向上させる方法を示します。

最初に単純な PHP ファイルserver.php を作成します。このファイルはローカル 9501 ポートをリッスンし、Hello World 文字列を返します:

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();
ログイン後にコピー

コマンド ラインを使用してこのファイルを実行し、アクセスします。 http://127.0.0.1:9501/ を見ると、Hello World が出力されていることがわかります。

ここで、このサーバーのコードを非同期モードに変更します。

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501, SWOOLE_BASE);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();
ログイン後にコピー

上記のコードでは、SWOOLE_BASE モードを使用してサーバーを起動するための 3 番目のパラメーターを追加しました。このようにして、Swoole が提供するコルーチン、非同期 IO、およびイベント リスニング機能を使用できます。

次に、Apache Bench ツールを使用して、大量のリクエストを処理するときのサーバーのパフォーマンスをテストします。

Apache Bench ツールは、実際の HTTP リクエストをシミュレートできます。このツールが提供するマルチスレッドの同時リクエストを使用して、同時にサーバーにアクセスする複数のユーザーをシミュレートし、さまざまなリクエスト負荷の下でサーバーのパフォーマンスをテストできます。

ターミナルに次のコマンドを入力して、Apache Bench ツールをインストールします:

# ubuntu
sudo apt-get install apache2-utils

# centos
sudo yum install httpd-tools
ログイン後にコピー

次のコマンドを使用して、サーバーのパフォーマンスを今すぐテストします:

ab -n 1000 -c 100 http://127.0.0.1:9501
ログイン後にコピー

このコマンドでは、 -n パラメータを使用してリクエストの総数を示し、-c パラメータは同時リクエストの数を示します。リクエストの合計数を 1000 に、同時リクエストの合計数を 100 に設定します。

テストが完了すると、Apache Bench によって出力されたテスト結果が表示されます。

Concurrency Level:      100
Time taken for tests:   0.041 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      110000 bytes
HTML transferred:       12000 bytes
Requests per second:    24540.63 [#/sec] (mean)
Time per request:       4.075 [ms] (mean)
Time per request:       0.041 [ms] (mean, across all concurrent requests)
Transfer rate:          2624.27 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     1    4   0.5      4       6
Waiting:        0    4   0.5      4       6
Total:          1    4   0.5      4       6

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      4
  80%      4
  90%      4
  95%      5
  98%      5
  99%      5
 100%      6 (longest request)
ログイン後にコピー

このサーバーが 1000 リクエストを処理すると、各リクエストの平均応答時間が 4.075 であることがわかります。ミリ秒の場合、1 秒あたりの応答リクエストの数は約 24540 です。このパフォーマンス結果はすでに非常に良好です。

次に、サーバーの負荷を増やして、同時実行性が高い条件下で Swoole フレームワークがどのように動作するかを確認します。同時リクエストの数を 1000 に増やします。

ab -n 10000 -c 1000 http://127.0.0.1:9501
ログイン後にコピー

テストが完了すると、Apache Bench によってテスト結果が再度出力されます。

Concurrency Level:      1000
Time taken for tests:   2.437 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      1100000 bytes
HTML transferred:       120000 bytes
Requests per second:    4107.95 [#/sec] (mean)
Time per request:       243.651 [ms] (mean)
Time per request:       0.244 [ms] (mean, across all concurrent requests)
Transfer rate:          441.50 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8  84.5      0     1000
Processing:     1   22  16.0     20      176
Waiting:        0   21  16.0     20      176
Total:          1   30  86.2     20     1001

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     23
  75%     25
  80%     26
  90%     30
  95%     41
  98%     52
  99%     65
 100%   1001 (longest request)
ログイン後にコピー

同時リクエストの数が 1000 に達しても、このサーバーの応答時間はわずか約 200 ミリ秒です。非同期プログラミングを使用する同期 Web サーバーと比較して、Swoole は同時実行性とパフォーマンスを大幅に向上させることができます。

4. 概要

この記事では、Web サービスのパフォーマンスを向上させるための Swoole フレームワークとそのアプリケーションを紹介します。 Swoole を使用してコルーチンを開始する方法、メモリ リークに注意する方法、および Swoole 非同期サーバーのパフォーマンスをテストする方法を学びました。

実際には、Swoole ツールや Apache Bench ツールなどの効率的なツールを使用して、Web サービスのパフォーマンスを向上させることができます。インターネット上の同時実行性の高いシナリオでは、非同期プログラミングに Swoole を使用すると、サーバーのパフォーマンスが大幅に向上し、企業の高パフォーマンス Web サービスのニーズを満たすことができます。

以上がSwoole 非同期プログラミングの実践: Web サービスのパフォーマンスを 10 倍向上させるの詳細内容です。詳細については、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)

C++ 関数を使用して非同期プログラミングを実装するにはどうすればよいですか? C++ 関数を使用して非同期プログラミングを実装するにはどうすればよいですか? Apr 27, 2024 pm 09:09 PM

概要: C++ の非同期プログラミングを使用すると、時間のかかる操作を待たずにマルチタスクを行うことができます。関数ポインターを使用して、関数へのポインターを作成します。コールバック関数は、非同期操作が完了すると呼び出されます。 boost::asio などのライブラリは、非同期プログラミングのサポートを提供します。実際のケースでは、関数ポインターと boost::asio を使用して非同期ネットワーク リクエストを実装する方法を示します。

Laravelでswooleコルーチンを使用する方法 Laravelでswooleコルーチンを使用する方法 Apr 09, 2024 pm 06:48 PM

Laravel で Swoole コルーチンを使用すると、大量のリクエストを同時に処理でき、次のような利点があります: 同時処理: 複数のリクエストを同時に処理できます。高いパフォーマンス: Linux の epoll イベント メカニズムに基づいて、リクエストを効率的に処理します。低リソース消費: 必要なサーバー リソースが少なくなります。統合が簡単: Laravel フレームワークとのシームレスな統合が可能で、使いやすいです。

スウールとワーカーマンはどちらが良いですか? スウールとワーカーマンはどちらが良いですか? Apr 09, 2024 pm 07:00 PM

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

JavaScript 関数の非同期プログラミング: 複雑なタスクを処理するための重要なヒント JavaScript 関数の非同期プログラミング: 複雑なタスクを処理するための重要なヒント Nov 18, 2023 am 10:06 AM

JavaScript 関数の非同期プログラミング: 複雑なタスクを処理するための必須スキル はじめに: 最新のフロントエンド開発では、複雑なタスクを処理することが不可欠な部分になっています。 JavaScript 関数の非同期プログラミング スキルは、これらの複雑なタスクを解決する鍵となります。この記事では、JavaScript 関数の非同期プログラミングの基本概念と一般的な実践的な方法を紹介し、読者がこれらのテクニックをよりよく理解して使用できるように、具体的なコード例を示します。 1. 非同期プログラミングの基本概念 従来の同期プログラミングでは、コードは次のようになります。

swoole と java ではどちらの方がパフォーマンスが優れていますか? swoole と java ではどちらの方がパフォーマンスが優れていますか? Apr 09, 2024 pm 07:03 PM

パフォーマンスの比較: スループット: Swoole は、コルーチン メカニズムのおかげでスループットが高くなります。レイテンシー: Swoole のコルーチン コンテキスト スイッチングは、オーバーヘッドが低く、レイテンシーが小さくなります。メモリ消費量: Swoole のコルーチンが占有するメモリは少なくなります。使いやすさ: Swoole は、より使いやすい同時プログラミング API を提供します。

swoole_process ではユーザーがどのように切り替えられるのでしょうか? swoole_process ではユーザーがどのように切り替えられるのでしょうか? Apr 09, 2024 pm 06:21 PM

Swoole プロセスではユーザーを切り替えることができます。具体的な手順は、プロセスの作成、プロセス ユーザーの設定、プロセスの開始です。

swooleフレームワークでサービスを再起動する方法 swooleフレームワークでサービスを再起動する方法 Apr 09, 2024 pm 06:15 PM

Swoole サービスを再起動するには、次の手順に従います。 サービスのステータスを確認し、PID を取得します。サービスを停止するには、「kill -15 PID」を使用します。サービスの開始に使用したのと同じコマンドを使用してサービスを再起動します。

Java フレームワークでの非同期プログラミングにおける一般的な問題と解決策 Java フレームワークでの非同期プログラミングにおける一般的な問題と解決策 Jun 04, 2024 pm 05:09 PM

Java フレームワークでの非同期プログラミングにおける 3 つの一般的な問題と解決策: コールバック地獄: Promise または CompletableFuture を使用して、より直感的なスタイルでコールバックを管理します。リソースの競合: 同期プリミティブ (ロックなど) を使用して共有リソースを保護し、スレッドセーフなコレクション (ConcurrentHashMap など) の使用を検討します。未処理の例外: タスク内の例外を明示的に処理し、例外処理フレームワーク (CompletableFuture.Exceptionally() など) を使用して例外を処理します。

See all articles