天天看點

php實作并發處理之curl篇

php在并發處理方面的确不如java好。但是也有一些方法可以實作并發處理。比如使用curl就可以實作url的并發請求。

看到網上有人說使用curl會導緻阻塞,即所有的請求資料都擷取完畢後一并傳回,然後再進行資料處理。而不是擷取一個請求的資料就處理一個資料。其實這種說法是不對的,隻能說明他在代碼實作上有問題。

在php官方找了段導緻阻塞的示例代碼,如下:

下面是邊請求url,邊處理傳回資料的示例代碼:

注釋:

1.關于curl_multi_exec函數的傳回值:

傳回curlm_call_multi_perform 說明curl_multi_exec需要馬上被再調用一次。

傳回curlm_ok 說明已經有需要處理的資料。這時你需要進行相關處理,處理完後再次調用curl_multi_exec。

php中的curl_multi_exec是調用的curl庫中的curl_multi_perform方法。代碼在multi.c的230行左右。

2.此方式,雖然在擷取資料和資料處理上是并行的,但是在資料處理時依然是串行的。即資料是一條條依次處理的。如果deal方法比較耗時的話,那整體會非常耗時。