PHP アプリケーションでのマルチスレッドの実装の可能性については、常に議論されてきました。非現実的に思えるかもしれませんが、pthreads 拡張機能を使用してこれを実現する方法があります。
pthreads 拡張機能は、開発者がマルチスレッド PHP アプリケーションを作成できる強力なツールです。スレッドの作成、同期、管理のためのオブジェクト指向 API を提供します。ただし、この拡張機能は Web サーバー環境では使用できず、CLI ベースのアプリケーションのみに制限されていることに注意することが重要です。
注意することが重要です。 pthreads 拡張機能に関連する次の警告:
これは、pthreads 拡張機能を使用して複数のスレッドを作成する簡単な例です。
#!/usr/bin/php <?php class AsyncOperation extends Thread { public function __construct($arg) { $this->arg = $arg; } public function run() { if ($this->arg) { $sleep = mt_rand(1, 10); printf('%s: %s -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep); sleep($sleep); printf('%s: %s -finish' . "\n", date("g:i:sa"), $this->arg); } } } // Create a stack of threads $stack = array(); // Initiate multiple threads foreach ( range("A", "D") as $i ) { $stack[] = new AsyncOperation($i); } // Start the threads foreach ( $stack as $t ) { $t->start(); }
このスクリプトを実行すると、次のことに気づくでしょう。複数のスレッドが同時に作成され実行されることは、PHP のマルチスレッド機能を示しています。 pthreads.
実際のシナリオでの pthreads 拡張機能の使用例を次に示します。
error_reporting(E_ALL); class AsyncWebRequest extends Thread { public $url; public $data; public function __construct($url) { $this->url = $url; } public function run() { if (($url = $this->url)) { $this->data = file_get_contents($url); } else printf("Thread #%lu was not provided a URL\n", $this->getThreadId()); } } $t = microtime(true); $g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10)); // starting synchronization if ($g->start()) { printf("Request took %f seconds to start ", microtime(true) - $t); while ( $g->isRunning() ) { echo "."; usleep(100); } if ($g->join()) { printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data)); } else printf(" and %f seconds to finish, request failed\n", microtime(true) - $t); }
このスクリプトは、 pthreads 拡張機能を使用した非同期 Web リクエスト。複数のタスクを同時に処理する必要があるアプリケーションでマルチスレッドがどのようにパフォーマンスを向上させるかを示します。
pthreads 拡張機能は、PHP アプリケーションでマルチスレッドを実装する方法を提供します。にはいくつかの制限があります。ただし、開発者は警告を認識し、特定の使用例に対する pthread の適合性を考慮する必要があります。
以上がpthreads 拡張機能を使用して PHP アプリケーションにマルチスレッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。