網上這類方法似乎太多了。但是總是有一些問題存在。。。
對於多執行緒抓取,現在有如下幾種思路:
1.用apache的多執行緒特性,讓php進行「多程序」操作,就像post本身一樣
2.用curl的curl_multi庫
對於第一種,我還沒嘗試,因為這種製造的是偽多執行緒,也許效率會低很多,而且不好控制。
第二種我嘗試了,大概內容是這樣的:
其它的不多說,只說do while的那一塊。
那一塊的功能就是不停地等待,直到所有執行緒都結束。
而這種等待因為沒有訊息機制,所以只能靠不停地判斷來消耗時間(方式b),同時導致 cpu的大量占用,然後就發明了那個注釋很多的方法。
方式a的優點就是cpu占用小,具體原理不明。。。。
但是經過實際測試,出現如下結果:
電腦:台式電腦,phenom x3 720 2.80ghz*3
如果使用curl單執行緒的話,耗時24秒;
當使用多執行緒時,情況如下:
【方式b】
每2網頁處理一次:14秒
每10網頁處理一次:9.8秒
每100網頁處理一次:9.8秒
每999網頁處理一次:讀不出資料了- -
可見多執行緒可以大大提高讀取速度,當到10執行緒的時候,已經到極限了,已經把網路延遲降低到最小了。。。
【方式a】
每10網頁處理一次 >30秒
每100網頁處理一次 :21秒
每200網頁處理一次:14秒
每300網頁處理一次:12.9秒
每500網頁處理一次:8.3秒,但是顯示不出來網頁了。。。。
可見a方式在處理大量執行緒(上百個)時有巨大優勢,但是在這種條件下仍然不是最快的。。。
可能需要更大的資料?
結合未來使用情況,批量抓取網頁只是每幾分鐘一次,而且不存在n使用者同時多執行緒抓取的,但是處理時間其實已經很接近了……所以現在還沒想好用哪個- -從健康講似乎a方式更好一點,雖然會慢那麼一點點。。。。
下次測試一下post方式再說吧~
curl 多執行緒抓取
php curl 多執行緒抓取 curl 多執行緒 param array array 並行 param int timeout 超時時間 防止死迴圈耗死cpu 這段是根據網上的寫法 do while mrc curlm call multi perform 當正在接受資料時 while activ...
curl模擬多執行緒抓取網頁 優化
通過上篇文章清楚了通過curl multi 函式可以一次請求多個url,但是也留下了問題,就是結果要等所有資料請求結束一起返回,才能逐個處理資料。優化 使先成功請求的url先返回處理結果,而不是等著所有一起返回。修改後的模型 do if running curl multi select mh wh...
curl多執行緒抓取資料
curl模擬多執行緒,傳入一維陣列url curl模擬多執行緒 access public author 2017.4 param array return array function getcurlobject urls array responses array 聲名乙個陣列 dowhile ...