亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

php cURL和Rolling cURL并發方式比較

2020-03-22 17:43:33
字體:
來源:轉載
供稿:網友
在實際項目或者自己編寫小工具(比如新聞聚合,商品價格監控,比價)的過程中, 通常需要從第3方網站或者API接口獲取數據, 在需要處理1個URL隊列時, 為了提高性能, 可以采用cURL提供的curl_multi_*族函數實現簡單的并發。
本文將探討兩種具體的實現方法, 并對不同的方法做簡單的性能對比.
1. 經典cURL并發機制及其存在的問題
經典的cURL實現機制在網上很容易找到, 比如參考PHP在線手冊的如下實現方式:
復制代碼 代碼如下:
functionhtml' target='_blank'>classic_curl($urls,
$delay)
{ $queue= curl_multi_init(); $map= array(); foreach($urlsas
$url)
{ //
create cURL resources $ch= curl_init(); //
set URL and other appropriate options curl_setopt($ch,
CURLOPT_URL, $url); curl_setopt($ch,
CURLOPT_TIMEOUT, 1); curl_setopt($ch,
CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,
CURLOPT_HEADER, 0); curl_setopt($ch,
CURLOPT_NOSIGNAL, true); //
add handle curl_multi_add_handle($queue,
$ch); $map[$url]
= $ch; } $active= null; //
execute the handles do{ $mrc= curl_multi_exec($queue,
$active); }
while($mrc== CURLM_CALL_MULTI_PERFORM); while($active 0 && $mrc== CURLM_OK) { if(curl_multi_select($queue,
0.5) != -1) { do{ $mrc= curl_multi_exec($queue,
$active); }
while($mrc== CURLM_CALL_MULTI_PERFORM); } } $responses= array(); foreach($mapas
$url= $ch)
{ $responses[$url]
= callback(curl_multi_getcontent($ch),
$delay); curl_multi_remove_handle($queue,
$ch); curl_close($ch); } curl_multi_close($queue); return$responses;}

首先將所有的URL壓入并發隊列, 然后執行并發過程, 等待所有請求接收完之后進行數據的解析等后續處理. 在實際的處理過程中, 受網絡傳輸的影響, 部分URL的內容會優先于其他URL返回, 但是經典cURL并發必須等待最慢的那個URL返回之后才開始處理, 等待也就意味著CPU的空閑和浪費. 如果URL隊列很短, 這種空閑和浪費還處在可接受的范圍, 但如果隊列很長, 這種等待和浪費將變得不可接受.
2. 改進的Rolling cURL并發方式
仔細分析不難發現經典cURL并發還存在優化的空間, 優化的方式時當某個URL請求完畢之后盡可能快的去處理它, 邊處理邊等待其他的URL返回, 而不是等待那個最慢的接口返回之后才開始處理等工作, 從而避免CPU的空閑和浪費. 閑話不多說, 下面貼上具體的實現:
復制代碼 代碼如下:
functionrolling_curl($urls,
$delay)
{ $queue= curl_multi_init(); $map= array(); foreach($urlsas
$url)
{ $ch= curl_init(); curl_setopt($ch,
CURLOPT_URL, $url); curl_setopt($ch,
CURLOPT_TIMEOUT, 1); curl_setopt($ch,
CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,
CURLOPT_HEADER, 0); curl_setopt($ch,
CURLOPT_NOSIGNAL, true); curl_multi_add_handle($queue,
$ch); $map[(string)
$ch]
= $url; } $responses= array(); do{ while(($code= curl_multi_exec($queue,
$active))
== CURLM_CALL_MULTI_PERFORM) ; if($code!= CURLM_OK) { break;
} //
a request was just completed -- find out which one while($done= curl_multi_info_read($queue))
{ //
get the info and content returned on the request $info= curl_getinfo($done['handle']); $error= curl_error($done['handle']); $results= callback(curl_multi_getcontent($done['handle']),
$delay); $responses[$map[(string)
$done['handle']]]
= compact('info',
'error',
'results'); //
remove the curl handle that just completed curl_multi_remove_handle($queue,
$done['handle']); curl_close($done['handle']); } //
Block for data in / output; error handling is done by curl_multi_exec if($active 0) { curl_multi_select($queue,
0.5); } }
while($active); curl_multi_close($queue); return$responses;}

3. 兩種并發實現的性能對比
改進前后的性能對比試驗在LINUX主機上進行, 測試時使用的并發隊列如下:http://a.com/item.htm?id=14392877692
http:/a.com/item.htm?id=16231676302
http://a.com/item.htm?id=5522416710
http://a.com/item.htm?id=16551116403
簡要說明下實驗設計的原則和性能測試結果的格式: 為保證結果的可靠, 每組實驗重復20次, 在單次實驗中, 給定相同的接口URL集合, 分別測量Classic(指經典的并發機制)和Rolling(指改進后的并發機制)兩種并發機制的耗時(秒為單位), 耗時短者勝出(Winner), 并計算節省的時間(Excellence, 秒為單位)以及性能提升比例(Excel. %). 為了盡量貼近真實的請求而又保持實驗的簡單, 在對返回結果的處理上只是做了簡單的正則表達式匹配, 而沒有進行其他復雜的操作. 另外, 為了確定結果處理回調對性能對比測試結果的影響, 可以使用usleep模擬現實中比較負責的數據處理邏輯(如提取, 分詞, 寫入文件或數據庫等).
性能測試中用到的回調函數為:
復制代碼 代碼如下:
functioncallback($data,
$delay)
{ preg_match_all('/ h3 (.+) //h3 /iU',
$data,
$matches); usleep($delay); returncompact('data',
'matches');}

數據處理回調無延遲時: Rolling Curl略優, 但性能提升效果不明顯。
PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲影院在线看| 久久伊人精品一区二区三区| 国产精品三级网站| 国产精品日日摸夜夜添夜夜av| 日本在线精品视频| 国产综合在线视频| 91色在线视频| 欧美性jizz18性欧美| 国产在线久久久| 色综合视频网站| 精品久久久精品| 欧美一性一乱一交一视频| 亚洲一级免费视频| 日韩免费在线播放| 欧美性一区二区三区| 92国产精品视频| 91av免费观看91av精品在线| 国产精品久久久久久久久久免费| 久久亚洲精品一区| 中文字幕视频在线免费欧美日韩综合在线看| 日韩一中文字幕| 亚洲国产高清高潮精品美女| 97国产suv精品一区二区62| 丝袜情趣国产精品| 岛国av在线不卡| 91香蕉嫩草影院入口| 亚洲欧美日韩国产精品| 日韩av日韩在线观看| 欧美成aaa人片免费看| 亚洲一区二区少妇| 亚洲色图在线观看| 国产一区av在线| 日韩中文字幕在线视频播放| 国产精品欧美日韩久久| www亚洲欧美| 久久久久国产精品免费网站| 欧美日韩亚洲高清| 亚洲精品色婷婷福利天堂| 国产精品久久久久国产a级| 欧美性猛交xxxx黑人猛交| 国产小视频国产精品| 亚洲女人被黑人巨大进入al| 亚洲一区二区国产| 国产精国产精品| 欧美在线视频在线播放完整版免费观看| 日本韩国欧美精品大片卡二| 久久精品国产综合| 欧美在线视频免费播放| 中文字幕日韩有码| 日本午夜在线亚洲.国产| 亚洲一区久久久| 亚洲美女又黄又爽在线观看| 中文字幕欧美视频在线| 91欧美激情另类亚洲| 久久九九热免费视频| 亚洲第一中文字幕在线观看| 国产专区精品视频| 亚洲福利在线观看| 国产精品视频成人| 麻豆成人在线看| 日韩免费电影在线观看| 亚洲国产精品va在线| 日韩黄色av网站| 欧美猛交免费看| 色婷婷综合成人| 97精品伊人久久久大香线蕉| 国产成人精品免高潮费视频| 亚洲国产天堂久久国产91| 成人精品aaaa网站| 欧美视频中文在线看| 久久久久久av| 亚洲图片在区色| 国产成人精品久久二区二区91| 成人情趣片在线观看免费| 欧美精品精品精品精品免费| 日韩激情视频在线播放| 亚洲国产精品99久久| 欧美激情成人在线视频| 欧美精品videosex极品1| 亚洲风情亚aⅴ在线发布| 国产在线播放91| 91成品人片a无限观看| 亚洲国内精品在线| 国产日韩在线精品av| 亚洲人av在线影院| 福利视频第一区| 亚洲午夜精品久久久久久久久久久久| 7777kkkk成人观看| 日韩中文在线观看| 欧美大片第1页| 亚洲亚裔videos黑人hd| 最好看的2019的中文字幕视频| 亚洲男人天堂网站| 亚洲香蕉伊综合在人在线视看| 亚洲精品久久久一区二区三区| 国产美女久久精品香蕉69| 韩剧1988免费观看全集| 夜夜嗨av一区二区三区免费区| 欧美激情视频网站| 91欧美精品成人综合在线观看| 91在线精品视频| zzijzzij亚洲日本成熟少妇| 中文字幕久热精品在线视频| 在线精品国产成人综合| 欧美激情精品久久久久久蜜臀| 亚洲国产婷婷香蕉久久久久久| 亚洲free嫩bbb| 狠狠躁夜夜躁人人爽超碰91| 在线日韩日本国产亚洲| 国产精品电影网站| 欧美极品少妇全裸体| 日韩高清不卡av| 人人爽久久涩噜噜噜网站| 国语自产精品视频在免费| 91中文精品字幕在线视频| 欧美韩国理论所午夜片917电影| 国产精品露脸自拍| 国产成人一区二区三区| 欧美日韩在线观看视频小说| 欧洲日本亚洲国产区| 精品视频久久久久久| 97国产一区二区精品久久呦| 久久久久久69| 中文字幕欧美日韩| 国产亚洲一级高清| 欧美日韩成人精品| 中文字幕免费精品一区| 午夜精品久久17c| 亚洲精品免费在线视频| 欧美性猛交xxxx乱大交3| 影音先锋日韩有码| 美日韩精品视频免费看| 欧美性猛交99久久久久99按摩| 国语自产精品视频在线看抢先版图片| 久久久久久久久电影| 久久久久久久久爱| 国产不卡av在线免费观看| 国产精品91在线| 岛国精品视频在线播放| 亚洲男人第一av网站| 国产精品一区av| 日韩专区在线观看| 国产婷婷成人久久av免费高清| 亚洲精品一区中文字幕乱码| 亚洲欧美中文另类| 成人a免费视频| 亚洲国产精久久久久久久| 欧美成人自拍视频| 亚洲美腿欧美激情另类| 91黑丝高跟在线| 亚洲aⅴ日韩av电影在线观看| 亚洲成人动漫在线播放| 亚洲国产欧美日韩精品| 国产精品极品美女粉嫩高清在线| 91精品国产九九九久久久亚洲| 中国人与牲禽动交精品| 91色视频在线导航| 久久精品久久精品亚洲人| 91在线播放国产| 久久久www成人免费精品| 欧美激情第三页| 欧美视频在线观看 亚洲欧| 欧美激情视频网址| 欧美成年人视频网站|