PHP でのマルチスレッドの実装

WBOY
リリース: 2024-02-28 09:24:01
転載
866 人が閲覧しました

PHP でのマルチスレッドの実装は、開発者にとって常に懸念事項です。インターネット アプリケーションの継続的な開発に伴い、多数の同時リクエストを処理する必要性がますます高まっています。この記事では、PHP でマルチスレッドを実装する方法を紹介し、マルチスレッドの利点と適用可能なシナリオを検討し、開発者が複雑な同時実行要件に適切に対処できるように支援します。 PHP でのマルチスレッドのアプリケーションを詳しく見てみましょう。


php ParallelConcurrency 拡張機能で Parallel を使用してマルチスレッドを実装します

Parallel 並列同時実行拡張機能を使用すると、PHP でマルチスレッドを実装できます。

この拡張機能は、説明スレッド Parallel\Runtime を提供します。 Parallel\Runtime() クラスからオブジェクトを作成することで、スレッドを作成できます。

このクラスは、タスクの並列実行をスケジュールするメソッド run() を提供します。 Closure をパラメータとして run メソッドに渡すことができます。

このパラメータは通常、task と呼ばれます。メソッドの 2 番目のパラメータとして array を指定することもできます。配列の内容はタスクに渡されます。

Parallel Parallel Concurrency 拡張機能をダウンロードする前に、いくつかの要件があります。 PHP バージョンは 8.0 で、Zend Thread Safe (ZTS) が有効になっている必要があります。

<pthread.h> ヘッダーも要件の 1 つです。以下に示すように、pecl から拡張機能をダウンロードできます。

リーリー

for ループを使用して、 プログラムの並列実行を テストできます。

たとえば、run() メソッド内でループを実行し、メソッド外で別のループを実行できます。この場合、コードは並列実行されます。

たとえば、クラス Parallel\Runtime のオブジェクトを作成し、そのオブジェクトを使用して run() メソッドを呼び出します。 run() メソッドで、匿名関数を作成します。 まず、関数内で

シンボルを 50 回出力する for ループを作成します。次に、run() メソッドの外側に、- シンボルを 50 回出力する別の for ループを作成します。

run()

メソッド内のループは別のスレッドで実行されるため、run() メソッドの外側のループは同時に実行されます。その結果、以下の出力セクションに示すように、- シンボルが同時に出力されます。 したがって、並列同時実行拡張機能を使用して、PHP でマルチスレッドを実装できます。

サンプルコード:

リーリー

出力:

リーリー

PHP の
popen()

関数を使用してマルチスレッドを実装します

popen()

関数を使用して、PHP で並列プロセスを開くことができます。 この関数はプロセスをフォークして並列処理を実現します。プロセスはリソースを共有しません。

このようにして、PHP でマルチスレッドを実装できます。

popen()

この関数は、フォークされたプロセスへのパイプを作成します。

popen()

関数を反復処理し、複数のプロセスを作成してマルチスレッドを実現できます。 popen() 関数は、最初のパラメータとして command を、2 番目のパラメータとして mode を受け取ります。 パターンは

r

または w です。 たとえば、5 回ループする

for

ループを作成します。ループ内に、5 回ループする別の for ループを作成します。 サブループ内で、配列

$process

を作成し、popen() 関数を保存します。 PHP ファイル message.phpr モードを最初と 2 番目のパラメーターとして設定します。 次に、別のサブループを作成し、

pclose()

関数を使用して $process を閉じます。 ここでは、最初のサブループで 5 つのプロセスが並列実行されます。プロセスは、

pclose()

関数を使用して 2 番目のサブループで終了します。 これは、PHP の

popen()

関数を使用してマルチスレッドを実装する方法です。 サンプルコード:

リーリー

以上がPHP でのマルチスレッドの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:lsjlt.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート