background image

$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:

//item.taobao.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.taobao.com/item.htm?id=16551116403