$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