ホームページ  >  記事  >  バックエンド開発  >  pthread はマルチスレッドクエリを実装します_PHP チュートリアル

pthread はマルチスレッドクエリを実装します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:39:08930ブラウズ

はじめに: ほとんどの 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 は必須オプションです:

cd /Data/tgz/php-5.5.1
./configure --prefix=/Data/apps/php --with-config-file-path=/Data/apps/php/etc --with-mysql=/Data/apps/mysql --with-mysqli=/ Data/apps/mysql/bin/mysql_config --with-iconv-dir --with-freetype-dir=/Data/apps/libs --with-jpeg-dir=/Data/apps/libs --with-png- dir=/Data/apps/libs --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem -- Enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt=/Data/apps/libs --with-gd --enable-gd-native- ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-opcache --with-pdo-mysql --イネーブルメンテナ-zts
きれいにする
作る
インストールを行う

pthreads-master.zip を解凍します
cd pthreads-master
/Data/apps/php/bin/phpize
./configure --with-php-config=/Data/apps/php/bin/php-config
作る
インストールする


vi /Data/apps/php/etc/php.ini


追加:

拡張子 = "pthreads.so"



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";   ?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/735050.html技術記事説明: ほとんどのウェブサイトのパフォーマンス ボトルは PHP サーバー上に存在しないため、横方向の追加サービスまたは CPU コア数を介して轻松应对 (さまざまなクラウド マスター、VPS の追加、または...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。