1、nginx swoole
swoole是一個非同步、並行、高效能的網路通訊引擎,使用純C語言編寫,提供了php語言的異步多執行緒伺服器。 swoole內建了http/websocket伺服器端和客戶端,http2.0伺服器端,支援類似Go語言的協程,可以使用同步程式碼實現一步程式。
swoole採用I/O多路復用非同步阻塞的Reactor模型,採用多執行緒Reactor 多執行緒Worker實作非同步I/O。 Reactor基於Epoll,每個Reactor可以處理無數個連接請求,因而可以輕鬆處理高並發。
Nginx swoole模式下,nginx作為前端存取層轉送機,swoole作為應用程式伺服器建構高並發web服務。
2、nginx php-fpm
FastCGI是一個中立的技術標準,php-fpm是php語言的FastCGI進程管理器。
CGI的fork-and-execute模式有很多缺點,每接收一個請求就要fork一個進程處理,只能接收一個請求做出一個回應;每一個web請求PHP都必須重新解析php. ini文件,重新載入全部擴充並初始化全部資料結構。
FastCGI會事先啟動起來,解析php.ini文件,載入擴展,初始化資料結構都只會在啟動時完成,作為一個CGI管理伺服器存在,使用進程/線程池預先啟動一系列的子進程來等待處理。然後web伺服器寄過來請求,一旦FastCGI接收到請求就交給子進程處理,不需要在接收到請求後啟動CGI,會快很多。 Web伺服器透過一個socket長連線請求FastCGI進程管理器。
FastCGI進程像是常駐CGI,在請求到達時,FastCGI進程管理器選擇並連接一個PHP-CGI解釋器去接收web伺服器發送過來的環境變數和標準輸入,請求處理完成後將標準輸出或錯誤從相同連線傳回web伺服器,該PHP-CGI解釋器子進程等待處理來自FastCGI進程管理器的下一個連線。
3、apache mod_php
mod_php模式運行php,表示php是作為apache的一個模組來啟動。只有在apache啟動的時候會讀取php.ini設定檔並載入擴充模組,在apache運作期間是不會再去讀取和載入擴充模組的。 Apache出於穩定性和安全性考慮,通常使用預設的prefork模式運行php程式。在prefork模式下,一個單獨的控制進程負責產生子進程,這些子進程用於監聽請求並作出回應。
Apache總是試圖保持一些備用或空閒的子程序來迎接即將到來的請求,這樣客戶端就不需要在得到服務前等候子程序的產生。但是,一旦連線數多了,apache必須要產生更多的進程來回應請求,CPU對於進程的切換就很頻繁,很耗事件和資源,導致apache效能下降;同時,apache在同步阻塞I/O模型下,select遍歷多個連接句柄才能知道句柄是否有事件通知,因此效率非常低。
推薦教學:PHP影片教學
#以上是php有哪些運行環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!