while (($code =curl_multi_exec($queue, $ active)) == CURLM_CALL_MULTI_PERFORM) ;
if ($code != CURLM_OK) { Break; }
// リクエストが完了しました -- どれかを調べます
while ($done =curl_multi_info_read($queue)) {
// リクエストで返された情報とコンテンツを取得します
$info =curl_getinfo($done['handle']);
$error =curl_error($done['handle']);
$results = callback(curl_multi_getcontent) ($done['ハンドル']), $遅延);
$ 応答[$map[(文字列) $done['ハンドル']]] = コンパクト('情報', 'エラー', '結果');
// 完了したばかりのカールハンドルを削除します
curl_multi_remove_handle($queue, $done['handle']);
curl_close($done['handle']);
}
// データ入力/出力をブロックします。エラー処理は、curl_multi_exec
if ($active > 0) {
curl_multi_select($queue, 0.5);
} while ($active);
return $responses; によって行われます。
3. 2 つの同時実装のパフォーマンス比較
改善前後のパフォーマンス比較テストは、LINUX ホストで実行されました。テスト中に使用された同時キューは次のとおりです。 .com/item.htm ?id=14392877692
http://item.taobao.com/item.htm?id=16231676302
http://item.taobao.com/item.htm?id=17037160462
http:/ /item.taobao.com /item.htm?id=5522416710
http://item.taabao.com/item.htm?id=16551116403
http://item.taovao.com/item.htm?id=14088310973
実験を簡単に説明します パフォーマンス テスト結果の設計原則と形式: 結果の信頼性を確保するために、各セットの実験を 1 回の実験で 20 回繰り返し、同じインターフェイス URL セットを指定し、クラシック (古典的な同時実行メカニズム) とローリング (改良された同時実行メカニズムを指します) 2 つの同時実行メカニズムの消費時間 (秒単位) を計算し、時間が短い方が勝ち (勝者)、節約された時間 (優秀、秒単位) を計算します。実験を単純に保ちながら実際のリクエストにできるだけ近づけるために、返された結果の処理で単純な正規表現マッチングのみを実行し、その他の複雑な処理は実行しませんでした。さらに、結果処理のコールバックを決定するために、パフォーマンス比較テストを実施しました。結果に影響を与えるために、usleep を使用して、実際のより信頼性の高いデータ処理ロジック (抽出、単語の分割、ファイルへの書き込みなど) をシミュレートできます。
パフォーマンス テストで使用されるコールバック関数は次のとおりです:
コードをコピーします コードは次のとおりです:
function callback($data, $delay) {
preg_match_all('/
(.+)
/iU', $data, $matches);
return Compact('data', 'matches');データ処理コールバックには遅延がありません: Rolling Curl の方がわずかに優れていますが、パフォーマンス向上の効果は明らかではありません。
データ処理コールバックは 5 ミリ秒遅延します。Rolling Curl が勝ち、パフォーマンスは約 40% 向上します。上記のパフォーマンス比較では、URL キューの同時処理を行うアプリケーション シナリオでは、同時実行キューの最大長 (1000 以上) を制御することができます。が返されて処理されると、まだリクエストされていない URL がすぐにキューに追加されます。この方法で記述されたコードはより堅牢になり、同時実行数が大きくなりすぎてスタックしたりクラッシュしたりすることはありません。詳しい実装については、http://code.google.com/p/rolling-curl/ を参照してください。
http://www.bkjia.com/PHPjc/325860.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/325860.html
技術記事この記事では、2 つの具体的な実装方法について説明し、さまざまな方法の簡単なパフォーマンスの比較を行います。 1. 古典的な cURL 同時実行メカニズムとその既存の問題 古典的な cURL 実装メカニズムは、オンラインで簡単に見つけることができます...。