ホームページ > バックエンド開発 > PHPチュートリアル > PHP マルチスレッド内部マルチスレッド インスタンス分析、PHP マルチスレッド インスタンス分析_PHP チュートリアル

PHP マルチスレッド内部マルチスレッド インスタンス分析、PHP マルチスレッド インスタンス分析_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:04:24
オリジナル
810 人が閲覧しました

PHP マルチスレッド内部マルチスレッドの例分析、PHP マルチスレッド例分析

この記事では、PHP マルチスレッドの内部マルチスレッドの使用状況を分析します。参考のためにみんなで共有してください。詳細は以下の通りです

コードをコピーします コードは次のとおりです: クラスHttp_MultiRequest
{
// 並行してクロールされる URL のリスト
プライベート $urls = array();
//カールオプション
プライベート $オプション;
//コンストラクター
関数 __construct($options = array())
{
$this->setOptions($options);
}
//URLリストを設定します
関数 setUrls($urls)
{
$this->urls = $urls;
$this を返します;
}
// オプションを設定します
関数 setOptions($options)
{
$options[CURLOPT_RETURNTRANSFER] = 1;
If (isset($options['HTTP_POST']))
{
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $options['HTTP_POST']);
unset($options['HTTP_POST']);
}
If (!isset($options[CURLOPT_USERAGENT]))
{
$options[CURLOPT_USERAGENT] = 'Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1;)';
}
If (!isset($options[CURLOPT_FOLLOWLOCATION]))
{
$options[CURLOPT_FOLLOWLOCATION] = 1;
}
If (!isset($options[CURLOPT_HEADER]))
{
$options[CURLOPT_HEADER] = 0;
}
$this->options = $options;
}
//すべてのコンテンツを並行して取得します
関数exec()
{
If(空($this->urls) || !is_array($this->urls))
{
false を返す;
}
$curl = $data = array();
$mh =curl_multi_init();
foreach($this->urls as $k =>$v)
{
$curl[$k] = $this->addHandle($mh, $v);
}
$this->execMulitHandle($mh);
foreach($this->urls as $k =>$v)
{
$data[$k] =curl_multi_getcontent($curl[$k]);
curl_multi_remove_handle($mh, $curl[$k]);
}
curl_multi_close($mh);
$data を返す;
}
// 1 つの Web ページのコンテンツのみを取得します。
関数execOne($url)
{
if (empty($url)) {
false を返す;
}
$ch =curl_init($url);
$this->setOneOption($ch);
$content =curl_exec($ch);
curl_close($ch);
$content を返す;
}
//内部関数、特定のハンドルのオプションを設定します
プライベート関数 setOneOption($ch)
{
curl_setopt_array($ch, $this->オプション);
}
// 新しい並列クロール ハンドルを追加します
プライベート関数 addHandle($mh, $url)
{
$ch =curl_init($url);
$this->setOneOption($ch);
curl_multi_add_handle($mh, $ch);
戻り $ch;
}
//並列実行 (この書き方はよくある間違いですが、私は今でもここでこの書き方、この書き方を使っています
) //小さなファイルをダウンロードするとカップが 100% を占める可能性があり、このサイクルは 100,000 回以上実行されます
//これは原理を理解していないために発生する典型的なエラーです。このエラーは、PHP 公式ドキュメントでよく見られます。 )
プライベート関数 execMulitHandle($mh)
{
$running = null;
{
をしてください curl_multi_exec($mh, $running);
} while ($running > 0);
}
}
/*以下は上記のクラスのテストの例です:*/
$urls = array("http://baidu.com", "http://baidu.com", "http://baidu.com", "http://baidu.com", "http:// baidu.com"、"http://baidu.com"、"http://www.google.com"、"http://www.sina.com.cn"、);
$m = 新しい Http_MultiRequest();
$t = マイクロタイム(true);
$m->setUrls($urls);
//パラレルフェッチ (パラレルフェッチ):
$data = $m->exec();
$Parallel_time = microtime(true) - $t;
echo $Parallel_time . "n";
$t = マイクロタイム(true);
//シリアルフェッチ(シリアルフェッチ):
foreach ($urls を $url として)
{
$data[] = $m->execOne($url);
}
$serial_time = microtime(true) - $t;
エコー $serial_time . "n";

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.com本当http://www.bkjia.com/PHPjc/965358.html技術記事 PHP マルチスレッドの内部マルチスレッドの例の分析、PHP マルチスレッドの例の分析 この記事では、PHP マルチスレッドの内部マルチスレッドの使用法を分析します。参考のためにみんなで共有してください。詳細は以下の通りです: 返信...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート