ホームページ > バックエンド開発 > PHPの問題 > phpのマルチスレッドは便利ですか?

phpのマルチスレッドは便利ですか?

(*-*)浩
リリース: 2023-02-26 20:56:01
オリジナル
2918 人が閲覧しました

PHP 5.3 以降では、pthreads PHP 拡張機能を使用すると、PHP でマルチスレッドを真にサポートできるようになります。複数の スレッドは反復的な周期的なタスクを処理するため、プログラムの実行時間を大幅に短縮できます。

phpのマルチスレッドは便利ですか?

前回の記事で、ほとんどの Web サイトのパフォーマンスのボトルネックは PHP サーバーにあるのではなく、サーバーを追加するだけで簡単に向上できると述べました。横方向または CPU コアの数で簡単に処理できます (さまざまなクラウド ホストの場合、VPS または CPU コアの数を増やした方が便利です。オペレーティング システムのインストールや設定を行わずに、バックアップ イメージを使用して直接 VPS を追加できます)システムと環境) ですが、それは MySQL データベース内にあります。 (推奨学習: PHP ビデオ チュートリアル )

MySQL データベースとジョイント クエリ SQL を使用する場合は、ビジネス ロジックを処理できる可能性があります。ただし、大量のエラーが発生した場合は、同時リクエストが多い場合は、停止する必要があります。

NoSQL データベースを使用する場合、同じビジネス ロジックを処理するのに 10 個のクエリが必要になる可能性がありますが、各クエリは MySQL よりも高速です。10 個のループ NoSQL クエリは、MySQL 結合クエリよりも高速である可能性があります。クエリ/秒はまったく問題ありません。 PHP マルチスレッドを追加し、同時に 10 個のスレッドで NoSQL をクエリし、結果の概要出力を返すと、速度が速くなります。

実際の APP 製品では、ユーザーの好みに基づいてリアルタイムで製品を推奨する PHP インターフェイスを呼び出します。PHP は、ユーザーのパーソナライズされた好みの製品データを計算するために、BigSea NoSQL データベースに対して 500 ~ 1,000 のクエリを開始する必要があります。 PHP には多くのスレッドの役割があり、その役割は非常に明白です。

Baidu 検索ページの PHP コード例をキャプチャするための PHP マルチスレッドと For ループを提供します:

<?php
   class test_thread_run extends Thread 
   {
       public $url;
       public $data;
 
       public function __construct($url)
       {
           $this->url = $url;
       }
 
       public function run()
       {
           if(($url = $this->url))
           {
               $this->data = model_http_curl_get($url);
           }
       }
   }
 
   function model_thread_result_get($urls_array) 
   {
       foreach ($urls_array as $key => $value) 
       {
           $thread_array[$key] = new 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;
           }
       }
       return $variable_data;
   }
 
   function model_http_curl_get($url,$userAgent="") 
   {
       $userAgent = $userAgent ? $userAgent : &#39;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)&#39;; 
       $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);
       return $result;
   }
 
   for ($i=0; $i < 100; $i++) 
   { 
       $urls_array[] = array("name" => "baidu", "url" => "http://www.baidu.com/s?wd=          ".mt_rand(10000,20000));
   }
 
   $t = microtime(true);
   $result = model_thread_result_get($urls_array);
   $e = microtime(true);
   echo "多线程:".($e-$t)."\n";
 
   $t = microtime(true);
   foreach ($urls_array as $key => $value) 
   {
       $result_new[$key] = model_http_curl_get($value["url"]);
   }
   $e = microtime(true);
   echo "For循环:".($e-$t)."\n";
 ?>
ログイン後にコピー

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

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