I. php 多進程的使用方式怎樣?? (絕大多數php程式都用上了 | 幾乎用不上)
II. php 多線程的使用方式怎樣?? (絕大多數php程式都用上了 | 幾乎用不上)
III. php 多進程 , php多線程 相比較 java 怎樣??(簡直糟透了 | 不相上下)
網路上幾乎都寫到 php 不適合多線程(是否也不適合多進程??),是否這樣就不需要瞭解多線程,多進程之類的php相關特性了??
然後最近由於個人喜好,想自己動手做一個 類似qq的網頁版聊天工具,現在 基本上瞭解了 socket 通訊 , 但 瞭解了下 workerman 這樣的開源 通訊架構,他的特性介紹裡麵包括以下幾個:
I. php多進程 可以發揮多核cpu優勢,提高效能,並支援高並發??
II . php單個進程可以支援幾千甚至幾萬的並發串連,多進程則可以支援數十萬甚至上百萬的並發串連。 這句話該怎麼理解?? 由於它採用的是 socket 的方式進行通訊,那麼連接埠數實際上是已經固定的,不會超過 65536 ,一個連接埠表示一對串連,這邊說的 幾千 -》 幾萬可能還好一點, 多進程下的 數十萬,上百萬,有那麼 厲害嗎??
回複內容:
I. php 多進程的使用方式怎樣?? (絕大多數php程式都用上了 | 幾乎用不上)
II. php 多線程的使用方式怎樣?? (絕大多數php程式都用上了 | 幾乎用不上)
III. php 多進程 , php多線程 相比較 java 怎樣??(簡直糟透了 | 不相上下)
網路上幾乎都寫到 php 不適合多線程(是否也不適合多進程??),是否這樣就不需要瞭解多線程,多進程之類的php相關特性了??
然後最近由於個人喜好,想自己動手做一個 類似qq的網頁版聊天工具,現在 基本上瞭解了 socket 通訊 , 但 瞭解了下 workerman 這樣的開源 通訊架構,他的特性介紹裡麵包括以下幾個:
I. php多進程 可以發揮多核cpu優勢,提高效能,並支援高並發??
II . php單個進程可以支援幾千甚至幾萬的並發串連,多進程則可以支援數十萬甚至上百萬的並發串連。 這句話該怎麼理解?? 由於它採用的是 socket 的方式進行通訊,那麼連接埠數實際上是已經固定的,不會超過 65536 ,一個連接埠表示一對串連,這邊說的 幾千 -》 幾萬可能還好一點, 多進程下的 數十萬,上百萬,有那麼 厲害嗎??
糾正一個概念:連接埠總數是一個unsigned short,即65535。這不代表一個伺服器只能支撐這麼多串連!一個連接埠對應一個進程,一個進程的串連數更這個進程開啟的socket描述符的數量是一致的。而描述符的數量是32位int數量級,當然系統有進程最多描述符的限制,可以通過核心參數來配置,但上個幾十萬肯定沒問題的。
一個典型的多進程http伺服器的工作原理大概是這樣的:一個進程負責監聽80連接埠的串連,當串連到來後,對應的描述符被核心建立出來,然後進程找一個相對閒置子進程來處理這個描述符,即在這個描述符上讀寫資料。注意這裡是子進程,正是因為子進程,才可以在父子進程間傳遞描述符。如果訪問量上來了,子進程的數量不夠了,父進程可以酌情建立新的子進程來處理描述符;父進程在一定程度上應當實現簡單的Server Load Balancer策略。
基於多線程的http伺服器工作原理其實差不多,把上面的進程改成線程一樣可以解釋。
以上闡述跟php沒有關係,php只不過是在這些底層的概念和系統調用上封裝了而已。大多數人使用php是基於php的指令碼解譯器。而workerman應該是基於php封裝的系統調用實現的http服務。