ホームページ >バックエンド開発 >PHPチュートリアル >pthread はマルチスレッドクエリを実装します_PHP チュートリアル
はじめに: ほとんどの Web サイトのパフォーマンスのボトルネックは PHP サーバーにありません。サーバーまたは CPU コアの数を水平方向に増やすだけで簡単に対処できます (さまざまなクラウド ホストの場合、VPS または CPU コアの数を増やす方が便利です)。 CPU コア、バックアップを直接使用するミラーは VPS を追加し、オペレーティング システムと環境をインストールして構成する必要はありませんが、MySQL データベースにあります。 NoSQL データベースを使用する場合、同じビジネス ロジックを処理するのに 10 個のクエリが必要になる場合があります。現時点では、PHP マルチスレッドの役割は非常に明白であり、NoSQL クエリを同時に実行できるため、効率が大幅に向上します。
PHP 5.3 以降では、pthreads PHP 拡張機能を使用することで、PHP が真にマルチスレッドをサポートできるようになります。マルチスレッドにより、繰り返しの周期的なタスクを処理する際のプログラムの実行時間を大幅に短縮できます。
PHP 拡張機能のダウンロード: https://github.com/krakjoe/pthreads
PHP マニュアル文書: http://php.net/manual/zh/book.pthreads.php
1. 拡張コンパイルとインストール (Linux)、編集パラメータ --enable-maintainer-zts は必須オプションです:
追加:
2. PHP マルチスレッドと For ループを指定して、Baidu 検索ページの PHP コード例をキャプチャします:
url = $url; } パブリック関数 run() { if(($url = $this->url)) { $this->data = model_http_curl_get($url); } } } 関数model_thread_result_get($urls_array) { foreach ($urls_array as $key => $value) { $thread_array[$key] = 新しい test_thread_run($value["url"]); $thread_array[$key]->start(); } foreach ($thread_array as $thread_array_key => $thread_array_value) { while($thread_array[$thread_array_key]->isRunning()) { usleep(10); } if($thread_array[$thread_array_key]->join()) { $variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data; } } $variable_data を返します。 } 関数model_http_curl_get($url,$userAgent="") { $userAgent = $userAgent ? $userAgent : 'Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 5.2)'; $curl =curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_TIMEOUT, 5); curl_setopt($curl, CURLOPT_USERAGENT, $userAgent); $result =curl_exec($curl); curl_close($curl); $result を返します。 } for ($i=0; $i "baidu", "url" => "http://www.baidu.com/s?wd=".mt_rand(10000,20000)); } $t = マイクロタイム(true); $result = model_thread_result_get($urls_array); $e = マイクロタイム(true); echo "多線程:".($e-$t)."n"; $t = マイクロタイム(true); foreach ($urls_array as $key => $value) { $result_new[$key] = model_http_curl_get($value["url"]); } $e = マイクロタイム(true); echo "循環环:".($e-$t)."n"; ?>)