PHP多程序程式設計(一)

2021-07-11 12:33:55 字數 1129 閱讀 5567

雖然php 中,多程序用的比較的少。但是畢竟可能是會用到了。我最近就遇到這樣乙個問題,使用者提交幾百個url以後,要讀出這個url 中的標題。

當然,你不希望使用者等待的太久,10s 鐘應該給出個答案。但是,本身,你要獲取乙個url 的標題,少的要 0.1s ,多的要好幾秒。

顯然,採用單個執行緒的方式是不行的。

我的第乙個設計方案是這樣的:

1. 用我前面提供的**提供乙個簡單的伺服器: 

這個伺服器的作用是:提供乙個url,然後,就讀取標題。這裡,可以每次讀128個位元組,看看有沒有讀到title,如果讀到title了就停止讀了。

這樣可以省頻寬。

2. 在客戶端,同時開啟1百個 socket ,訪問這個伺服器。如果提供的url數目超過100,那麼就多次執行。

這個方案,基本上能夠滿足要求,讀比較快的網頁如:google.com 100次,也只要1s 左右。但是,通過測試,發現,有一定

的概率在開啟鏈結的時候被阻塞。(有時候會阻塞個1s左右,然後繼續往下open)可能開啟了太多的鏈結了,會出很大的問題。

當然,這是乙個很差的解決方案:建立tcp 鏈結本身的消耗非常的大。因為可靠有序傳輸的要求,要維持乙個資料結構,而且,系統還要開闢一定的快取給客戶端和伺服器端,

使用者快取資料。如果建立上百個鏈結,就可能占用很大的記憶體。作為乙個系統的服務,應該盡量的簡單,就是,我叫你做什麼事情,你做好以後,結果給我就可以了。

一般來說,php要進行多程序程式設計,比較常見的是:

1. 要進行大量的網路耗時的操作

2. 要做大量的運算,並且,系統有多個cpu,為了讓使用者有更快的體驗,把乙個任務,分成幾個小任務,最後合併。

所以,應該盡量不要在呼叫的地方有太多複雜的邏輯,把邏輯內建在服務中。

我的第二個設計方案是這樣的:

具體怎麼編寫這個伺服器,在下乙個部分講。

當然,如果這樣的設計方案只是乙個很簡單的解決方案。如果有很多人使用你的服務的情況下,肯定不能這樣做。

php做企業級別的開發,乙個比較複雜的問題,就是記憶體怎麼處理。還有就是往往採用陣列 會引起記憶體急劇膨脹。一般,陣列處理10萬條資料已經是極限,

在小**開發很少會用到一次讀取如此大的資料量,要是遇到了,最好通過c 擴充套件進行解決,否則,一次會損耗 幾百m 的記憶體,10個人用就拖死你。

**:

PHP多程序程式設計(一)

雖然php 中,多程序用的比較的少。但是畢竟可能是會用到了。我最近就遇到這樣乙個問題,使用者提交幾百個url以後,要讀出這個url 中的標題。當然,你不希望使用者等待的太久,10s 鐘應該給出個答案。但是,本身,你要獲取乙個url 的標題,少的要 0.1s 多的要好幾秒。顯然,採用單個執行緒的方式是...

php 多程序程式設計

第一步 php m 命令檢視php是否安裝pcntl 和 posix擴充套件,若沒有則安裝使用場景 1.要進行大量的網路耗時的操作 2.要做大量的運算,並且,系統有多個cpu,為了讓使用者有更快的體驗,把乙個任務,分成幾個小任務,最後合併。多程序常用函式 pcntl alarm 為程序設定乙個ala...

PHP多程序程式設計

php本身不支援多執行緒,多程序支援的也不是特別好,網上找到乙份多程序 寫了乙個測試程式簡單測了一下,可以執行,但是離上線還差得很遠。project signfork php多執行緒庫 file signfork.class.php class signfork if is array arg sp...