PHP でのマルチスレッド: 可能ですか?
PHP でマルチスレッドが可能かどうかという問題は、長年の疑問です。オペレーティング システム上で複数の PHP インスタンスを強制するという過去の提案。ただし、このアプローチでは、メモリ使用率とプロセス終了の問題が発生しました。
pthreads の紹介
答えは、堅牢なオブジェクト指向 API を提供する pthreads 拡張機能にあります。 PHP でのマルチスレッド。この拡張機能は PHP 7.2 で使用でき、Web サーバー環境ではマルチスレッドがサポートされていないため、CLI ベースのアプリケーションが必要です。
pthreads の使用
pthreads 拡張機能は、次のようなクラスを提供します。 Thread、Workers、Threaded オブジェクトとしてスレッドの管理、タスクの同時実行、同期を行う
簡単な例
次のコード スニペットを考えてみましょう:
class AsyncOperation extends Thread { public function run() { // Long-running operation } } $stack = array(); foreach (range("A", "D") as $i) { $stack[] = new AsyncOperation($i); } foreach ($stack as $t) { $t->start(); }
このコードは複数のスレッドを作成し、それらを同時に実行し、タイムスタンプとタスクのステータス。
現実世界例
PHP でのマルチスレッドの実際的な応用例は、非同期 Web リクエストを作成することです:
class AsyncWebRequest extends Thread { public function run() { $this->data = file_get_contents($this->url); } } $g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10)); $g->start(); while ($g->isRunning()) { echo "."; usleep(100); } if ($g->join()) { printf("Request took %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data)); }
このコードは、非同期 Web リクエストを開始し、プロセス中にドットを出力し、時間をログに記録します。を受け取るために取られたresponse.
結論
pthreads 拡張機能を使用すると、PHP はマルチスレッド用の強力なメカニズムを提供し、開発者がタスクを同時に実行して CLI ベースのアプリケーションのパフォーマンスを向上させることができます。
以上がPHP は本当にマルチスレッドに対応できるのでしょうか? pthreads ソリューションの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。