PHP多程式(4) :內部多程式

發表於2016-04-06

上面一個系列的教程:

PHP多程式程式設計(一)

PHP多程式程式設計(二)管道通訊

PHP多程式程式設計(三)多程式抓取網頁的演示

說的都是隻相容unix 伺服器的多程式,下面來講講在window 和 unix 都相容的多程式(這裡是泛指,下面的curl實際上是通過IO複用實現的)。

通過擴充套件實現多執行緒的典型例子是CURL,CURL 支援多執行緒的抓取網頁的功能。

這部分過於抽象,所以,我先給出一個CURL並行抓取多個網頁內容的一個分裝類。這個類實際上很實用,

詳細分析這些函式的內部實現將在下一個教程裡面描述。

你可能不能很好的理解這個類,而且,php curl 官方主頁上都有很多錯誤的例子,在講述了其內部機制

後,你就能夠明白了。

先看程式碼:

看最後一個註釋最多的函式,這個錯誤在平時除錯的時候可能不太容易發現,因為程式完全正常,但是,在生產伺服器下,馬上會引起崩潰效果。

解釋為什麼不能這樣,必須從C 語言內部實現的角度來分析。這個部分將放到下一個教程(PHP高階程式設計之–單執行緒實現並行抓取網頁 )。不過不是通過C語言來表述原理,而是通過PHP

這個類,實際上也就很簡單的實現了前面我們費了4個教程的篇幅,並且是九牛二虎之力才實現的多執行緒的抓取網頁的功能。在純PHP的實現下,我們只能用一個後臺服務的方式來比較好的實現,但是當你使用 作業系統介面語言 C 語言時候,這個實現當然就更加的簡單,靈活,高效。

就同時抓取幾個網頁這樣一件簡單的事情,實際上在底層涉及到了很多東西,對很多半路出家的PHP程式設計師,可能不喜歡談多執行緒這個東西,深入了就涉及到作業系統,淺點說就是並行執行好幾個“程式”。但是,很多時候,多執行緒必不可少,比如要寫個快點的爬蟲,往往就會浪費九牛二虎之力。不過,PHP的程式設計師現在應該感謝CURL 這個擴充套件,這樣,你完全不需要用你不太精通的 python 去寫爬蟲了,對於一箇中型大小的爬蟲,有這個內部多執行緒,就已經足夠了。

最後是上面的類的一個測試的例子:

相關文章