ホームページ >バックエンド開発 >PHPチュートリアル >PHP 非同期
ここでの Async は Asynchronous の略で、プロセスが同期していないことを意味します。非同期により、コードの並列実行が可能になります。つまり、コード部分を個別に、互いに独立して実行できるということです。これを一般に非同期処理と呼びますが、PHPでも同様です。 PHP には非同期モデルがあり、これによりマルチタスクを同時に実行できます。コードの実行が高速になり、パフォーマンスも向上します。
広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
構文:
PHP では、Spatie パッケージを使用して非同期機能を使用できます。このパッケージを使用すると、非同期呼び出しを処理し、プログラムの並列実行を提供するのに役立つプールを作成できます。わかりやすく説明するために、構文を見てみましょう。以下を参照してください;
//package to be used use Spatie\Async\Pool; $mypool = Pool::create(); $mypool[] = async() { //your logic goes here })->then() { // your logic });
まず、パッケージ (ここでは「SpatieAsyncPool」) をインポートする必要があります。その後、非同期操作を処理するプールを作成します。この中に「async」キーワードを続けて、ロジック全体と並列実行するコード部分を記述します。ここにはコールバック メソッドである「then」メソッドがあります。この中に独自のロジックを記述することもできます。すべての操作が完了したら、「then」ブロック内の指定された出力に対してさらに操作を書くことができます。
これで、async 関数を使用すると複数のタスクを実行できることがわかりました。 PHP の同期プログラミングについて言えば、出力は常に同じ順序になります。 1 から 10 までの数値を出力したいとします。したがって、同期コードを使用してこのロジックを作成すると、常に昇順で取得されます。しかし、ここで同じロジックに非同期コードを使用しようとすると、番号の順序がわかりません。これについては、以下でいくつかの例を挙げて詳しく説明します。 PHP で非同期コードを記述するために、「spatie」という 1 つのパッケージを使用しました。これにより、非同期コードでのエラーや例外の処理も改善されます。まず、このパッケージを使用して簡単なロジックを作成する方法を見ていきます。次に、非同期コードで使用できるその他のメソッドについては後ほど詳しく説明します。
例:
use Spatie\Async
cmd:
composer require spatie
例:
$mypool = Pool::create();
プール オブジェクトには任意の名前を付けることができます。また、「Async」内に存在する Pool クラスをインポートすることを忘れないでください。以下を参照してください;
例:
use Spatie\Async\Pool;
例:
demoAsync(function () { // // }) ->then(function ($output) { // // })
上記のコードでは、非同期関数を作成し、そのコールバック メソッド「then」を使用しています。この「then」関数は、上記のコード ブロックが正常に実行されたときに動作する役割を果たします。そうでない場合は、Async の他のメソッドを使用してそのケースを処理する必要があります。
次に、コードの実行中に発生する可能性のあるエラー、例外、タイムアウトを処理するメソッドをいくつか見ていきます。このパッケージは、コードの非同期ブロック内でこれを処理するためのさまざまなメソッドを提供します。それぞれについて詳しく説明しましょう。以下を参照してください;
このメソッドは、コードのブロックが予想される時間枠内に操作を実行できなかった場合、またはエラーが発生した場合に実行されます。このメソッドを記述するための構文は次のとおりです:
例:
timeout(function () { // when timeout reached. })
コードのブロックが正常に実行され、その結果に対して追加の操作を実行する必要がある場合、メソッドが実行されます。このメソッドを記述するための構文は次のとおりです:
例:
then(function ($result) { // operation after result })
このメソッドは、コード ブロックが例外をスローした場合に実行されます。このメソッド内でそれらを処理し、ロジックを実行できます。このメソッドを記述するための構文を以下に示します。
例:
catch(function ($exp) { // exception can be handle here. })
Following are the examples given below:
In this example, we are implementing async with the method and printing two messages to keep it simple for beginners.
Code:
use Spatie\Async\Pool; $mypool = Pool::create(); $mypool ->asyncDemo(function () { print("async called here !!") }) ->then(function () { print("then called after result !!") } ;
Output:
In this example, we are using all the methods of async from the Spatie\Async\ package. Those are catch, then, and timeout. We keep it simple for now without too much logic.
Code:
use Spatie\Async\Pool; $mypool = Pool::create(); $mypool ->asyncDemo(function () { print("async called here !!") print("async called here !!") }) ->then(function ($output) { print("print called here !!") }) ->catch(function ($exception) { print("catch called here !!") }) ->timeout(function () { print("timeout called here !!") }) ;
Output:
By using async in our code, we can enable parallel execution of tasks in our program. Also, they increase the performance of the code because the piece of code is independent of each other. But using StopIteration in situations where the data from the previous block of code is dependent on the current can lead to data loss and inconsistency.
以上がPHP 非同期の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。