最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解PHP中curl_multi并發(fā)的實現(xiàn)

 更新時間:2020年06月08日 16:00:16   作者:uplemon  
這篇文章主要介紹了詳解PHP中curl_multi并發(fā)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

PHP中的curl_multi系列函數(shù)可以實現(xiàn)同時請求多個URL來實現(xiàn)并發(fā),而不是像普通curl函數(shù)那樣請求后會阻塞,直到結果返回才進行下一個請求。因此在批量請求URL時可通過curl_multi系列函數(shù)提升程序的運行效率。

curl普通請求

$startTime = microtime(true);
$chArr = [];
$optArr = [
  CURLOPT_URL => 'http://www.httpbin.org/ip',
  CURLOPT_HEADER => 0,
  CURLOPT_RETURNTRANSFER => 1,
];
$result = [];

//創(chuàng)建多個curl資源并執(zhí)行
for ($i=0; $i<10; $i++) {
  $chArr[$i] = curl_init();
  curl_setopt_array($chArr[$i], $optArr);
  $result[$i] = curl_exec($chArr[$i]);
  curl_close($chArr[$i]);
}

$endTime = microtime(true);
echo sprintf("use time: %.3f s".PHP_EOL, $endTime - $startTime);

use time: 6.080 s

curl_multi并發(fā)請求

$startTime = microtime(true);
$chArr = [];
$optArr = [
  CURLOPT_URL => 'http://www.httpbin.org/ip',
  CURLOPT_HEADER => 0,
  CURLOPT_RETURNTRANSFER => 1,
];
$result = [];

//創(chuàng)建多個curl資源
for ($i=0; $i<10; $i++) {
  $chArr[$i] = curl_init();
  curl_setopt_array($chArr[$i], $optArr);
}
//創(chuàng)建批處理curl句柄
$mh = curl_multi_init();
//將單個curl句柄添加到批處理curl句柄中
foreach ($chArr as $ch) {
  curl_multi_add_handle($mh, $ch);
}
//判斷操作是否仍在執(zhí)行的標識的引用
$active = null;
/**
 * 本次循環(huán)第一次處理 $mh 批處理中的 $ch 句柄,并將 $mh 批處理的執(zhí)行狀態(tài)寫入 $active,
 * 當狀態(tài)值等于 CURLM_CALL_MULTI_PERFORM 時,表明數(shù)據(jù)還在寫入或讀取中,執(zhí)行循環(huán),
 * 當?shù)谝淮?$ch 句柄的數(shù)據(jù)寫入或讀取成功后,狀態(tài)值變?yōu)?CURLM_OK ,跳出本次循環(huán),進入下面的大循環(huán)中。
 */
do {
  //處理在批處理棧中的每一個句柄
  $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
/**
 * 上面這段代碼中,是可以直接使用 $active > 0 來作為 while 的條件,如下:
 * do {
 *  $mrc = curl_multi_exec($mh, $active);
 * } while ($active > 0);
 * 此時如果整個批處理句柄沒有全部執(zhí)行完畢時,系統(tǒng)會不停的執(zhí)行 curl_multi_exec 函數(shù),從而導致系統(tǒng)CPU占用會很高,
 * 因此一般不采用這種方案,可以通過 curl_multi_select 函數(shù)來達到?jīng)]有需要讀取的程序就阻塞住的目的。
 */

/**
 * $active 為 true 時,即 $mh 批處理之中還有 $ch 句柄等待處理,
 * $mrc == CURLM_OK,即上一次 $ch 句柄的讀取或?qū)懭胍呀?jīng)執(zhí)行完畢。
 */
while ($active && $mrc == CURLM_OK) {
  /** 
   * 程序進入阻塞狀態(tài),直到批處理中有活動連接(即 $mh 批處理中還有可執(zhí)行的 $ch 句柄),
   * 這樣執(zhí)行的好處是 $mh 批處理中的 $ch 句柄會在讀取或?qū)懭霐?shù)據(jù)結束后($mrc == CURLM_OK)進入阻塞階段,
   * 而不會在整個 $mh 批處理執(zhí)行時不停地執(zhí)行 curl_multi_exec 函數(shù),白白浪費CPU資源。
   */
   if (curl_multi_select($mh) != -1) {
    //程序退出阻塞狀態(tài)繼續(xù)執(zhí)行需要處理的 $ch 句柄
    do {
      $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  }
}

foreach ($chArr as $i=>$ch) {
  //獲取某個curl句柄的返回值
  $result[$i] = curl_multi_getcontent($ch);
  //移除批處理句柄中的某個句柄資源
  curl_multi_remove_handle($mh, $ch);
}
//關閉一組curl句柄
curl_multi_close($mh);
$endTime = microtime(true);
echo sprintf("use time: %.3f s".PHP_EOL, $endTime - $startTime);

use time: 0.599 s

通過對比上述程序的運行時間可以得知,使用curl_multi系列函數(shù)并發(fā)請求要比普通的curl函數(shù)依次請求效率高很多。

到此這篇關于詳解PHP中curl_multi并發(fā)的實現(xiàn)的文章就介紹到這了,更多相關PHP curl_multi并發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • php使用多個進程同時控制文件讀寫示例

    php使用多個進程同時控制文件讀寫示例

    這篇文章主要介紹了php使用多個進程同時控制文件讀寫示例,需要的朋友可以參考下
    2014-02-02
  • php實現(xiàn)信用卡校驗位算法THE LUHN MOD-10示例

    php實現(xiàn)信用卡校驗位算法THE LUHN MOD-10示例

    這篇文章主要介紹了php實現(xiàn)信用卡校驗位算法THE LUHN MOD-10的示例,需要的朋友可以參考下
    2014-05-05
  • 搜索附近的人PHP實現(xiàn)代碼

    搜索附近的人PHP實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了搜索附近的人PHP實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • php實現(xiàn)批量壓縮圖片文件大小的腳本

    php實現(xiàn)批量壓縮圖片文件大小的腳本

    這篇文章主要介紹了php實現(xiàn)把某個目錄下的圖片進行批量壓縮文件大小的腳本,單反拍的圖片,體積太大,所以要壓縮,需要的朋友可以參考下
    2014-07-07
  • PHP將URL轉(zhuǎn)換成短網(wǎng)址的算法分享

    PHP將URL轉(zhuǎn)換成短網(wǎng)址的算法分享

    短網(wǎng)址(Short URL)顧名思義就是在形式上比較短的網(wǎng)址。在Web 2.0的今天,不得不說這是一個潮流。目前已經(jīng)有許多類似服務,借助短網(wǎng)址您可以用簡短的網(wǎng)址替代原來冗長的網(wǎng)址,讓使用者可以更容易的分享鏈接,下面來看看如何用PHP實現(xiàn)這個功能,有需要的朋友們可以參考。
    2016-09-09
  • 全世界最小的php網(wǎng)頁木馬一枚 附PHP木馬的防范方法

    全世界最小的php網(wǎng)頁木馬一枚 附PHP木馬的防范方法

    php網(wǎng)頁木馬代碼,大家可以看下自己的網(wǎng)站里面是不是有這樣的代碼,注意網(wǎng)站安全用mcafee限制w3wp.exe生成php或者asp文件。并在php.ini中設置一下。
    2009-10-10
  • PHP連接SQLServer2005方法及代碼

    PHP連接SQLServer2005方法及代碼

    這篇文章主要介紹了PHP連接SQLServer2005方法及代碼,有需要的朋友可以參考一下
    2013-12-12
  • PHP7.3.10編譯安裝教程

    PHP7.3.10編譯安裝教程

    這篇文章主要介紹了PHP7.3.10編譯安裝教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • php+html5實現(xiàn)無刷新圖片上傳教程

    php+html5實現(xiàn)無刷新圖片上傳教程

    這篇文章主要為大家介紹了php+html5實現(xiàn)無刷新圖片上傳教程,一種全新的上傳圖片的方式,利用html5的FileReader讀取圖片文件,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 基于php實現(xiàn)隨機合并數(shù)組并排序(原排序)

    基于php實現(xiàn)隨機合并數(shù)組并排序(原排序)

    最近做了一個項目,其中有這樣一個需求要實現(xiàn),原有帖子列表A,現(xiàn)在需要在A中推廣新業(yè)務B,那么需要在A列表中1:1混合B中的數(shù)據(jù),隨機混合,但是需要保持A和B兩列原來的數(shù)據(jù)排序,本篇文章給大家介紹基于php實現(xiàn)隨機合并數(shù)組并排序(原排序),需要的朋友參考下
    2015-11-11

最新評論

福安市| 洛川县| 塘沽区| 工布江达县| 垣曲县| 二连浩特市| 克什克腾旗| 永昌县| 仙游县| 玛纳斯县| 尚义县| 吴旗县| 靖安县| 东辽县| 龙州县| 玛多县| 赤峰市| 萍乡市| 远安县| 古蔺县| 渭源县| 湟源县| 松阳县| 丰城市| 普宁市| 洪湖市| 邵阳县| 荔波县| 吉隆县| 宣威市| 蒲江县| 济源市| 福州市| 遂宁市| 延寿县| 英超| 朔州市| 嘉定区| 土默特右旗| 合山市| 义乌市|