PHP高階程式設計之 單執行緒實現並行抓取網頁

2021-09-08 07:26:53 字數 2062 閱讀 9035

鑽研php很多年,想總結一下自己,但是不知從何說起,那就先談一些我知道的php的用法,這些用法很多有多年的工作經驗的人可能都不知道。

實際中可能用不到,但是用到了,就是體現你實力的時候。

現在問題是這樣的,乙個使用者,用的是windows 的虛擬伺服器,然後呢,當開啟乙個頁面的時候,要並行的抓取大概10個**的標題顯示出來。

這樣的用法很少見,但是,有需求,就得解決。

但是,最後發現,那個虛擬伺服器上沒有curl,這真是讓人糾結。於是,我決定改變思路,用單個執行緒也實現多個執行緒的效果。我想對網路程式設計有點

了解的人肯定知道io復用這個概念,當然php上也是支援的,而且,內部支援,不需要任何擴充套件。

可能有很多年程式設計經驗的人對php的stream 函式可能不太了解。php的壓縮檔案流,檔案流,tcp 協議下的應用 都封裝成乙個stream。所以,讀本地檔案

**比較的粗糙,如果大家要實際用的話,還是要處理一些細節問題。

"";//並行的抓取

//序列的抓取

$t1=

microtime

(true

);foreach

($urls

as$value

) $t1

=microtime

(true) -

$t1;

var_dump("

cost: ".

$t1);

?>

最後執行的結果:

(length=21)
(length=21)
基本上是被他給拖累了,360只要 0.2s

如果,所有**都差不多的速度,並行的數目更大,那麼差的倍數也就越大。

posted @

2010-12-15 14:03

暮夏 閱讀(

...)

編輯收藏

php 單執行緒

php 從設計之初到流行起來都沒有出現明顯需要用多執行緒才能解決的需求。某些需要用到多執行緒的地方也有相應的解決方案和替代方案。多執行緒並不總是比單執行緒優,多執行緒可能會引入其他問題 例如 兩個執行緒同時呼叫乙個類裡的同乙個方法時,可能出現死鎖的情況 每個 php 檔案的執行是單執行緒的,但是,伺...

python網路程式設計之單執行緒之間的併發

單執行緒之間的併發就是利用乙個執行緒實現併發的效果,也就是利用了cup遇到阻塞的那段時間去做別的事情,從而提高了cup的利用率,使之在單個執行緒中就實現了併發的效果。下面就是乙個簡單的服務端單個執行緒實現併發的 from socket import server socket af inet,soc...

簡單執行緒池實現

執行緒池可以處理多執行緒問題,只要將任務放到任務佇列中,執行緒池中的執行緒就會從佇列中取任務,以預設的優先順序開始執行,如果你的任務數大於正在工作的執行緒數,則執行緒池將會建立一根新的執行緒來輔助工作,但是永遠都不會超過執行緒池中線程的最大值。執行緒池的結構 pragma once include ...