一、PHP-FPM是什么
PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 進程管理器,用于管理PHP 進程池的軟件,用于接受web服務器的請求。
PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置。
(1). 為什么會出現php-fpm
fpm的出現全部因為php-fastcgi出現。為了很好的管理php-fastcgi而實現的一個程序
(2). 什么是php-fastcgi
php-fastcgi 只是一個cgi程序,只會解析php請求,并且返回結果,不會管理(因此才出現的php-fpm)。
(3)為什么不叫php-cgi
其實在php-fastcgi出現之前是有一個php-cgi存在的,只是它的執行效率低下,因此被php-fastcgi取代。
(4)那fastcgi和cgi有什么區別呢?
親們,這區別就大了,當一個服務web-server(nginx)分發過來請求的時候,通過匹配后綴知道該請求是個動態的php請求,會把這個請求轉給php。
在cgi的年代,思想比較保守,總是一個請求過來后,去讀取php.ini里的基礎配置信息,初始化執行環境,每次都要不停的去創建一個進程,讀取配置,初始化環境,返回數據,退出進程,久而久之,啟動進程的工作變的乏味無趣特別累。
當php來到了5的時代,大家對這種工作方式特別反感,想偷懶的人就拼命的想,我可不可以讓cgi一次啟動一個主進程(master),讓他只讀取一次配置,然后在啟動多個工作進程(worker),當一個請求來的時候,通過master傳遞給worker這樣就可以避免重復勞動了。于是就產生了fastcgi。
(5)fastcgi這么好,啟動的worker用完怎么辦?
當worker不夠的時候,master會通過配置里的信息,動態啟動worker,等空閑的時候可以收回worker
(6)到現在還是沒明白php-fpm 是個什么東西?
就是來管理啟動一個master進程和多個worker進程的程序.
PHP-FPM 會創建一個主進程,控制何時以及如何將HTTP請求轉發給一個或多個子進程處理。PHP-FPM主進程還控制著什
么時候創建(處理Web應用更多的流量)和銷毀(子進程運行時間太久或不再需要了)
PHP子進程。PHP-FPM進程池中的每個進程存在的時間都比單個HTTP請求長,可以處
理10、50、100、500或更多的HTTP請求。
延伸閱讀:
二、CGI是什么
CGI(Common Gateway Interface,CGI)通用網關接口, 是Web 服務器運行時外部程序的規范,按CGI 編寫的程序可以擴展服務器功能。CGI 應用程序能與瀏覽器進行交互,還可通過數據API與數據庫服務器等外部數據源進行通信,從數據庫服務器中獲取數據。格式化為HTML文檔后,發送給瀏覽器,也可以將從瀏覽器獲得的數據放到數據庫中。幾乎所有服務器都支持CGI,可用任何語言編寫CGI,包括流行的C、C ++、Java、VB 和Delphi 等。所以說CGI是一個協議,不是進程。CGI的存在,可以使用戶通過瀏覽器來訪問執行在服務器上的動態程序;CGI是Web服務器與CGI程序間傳輸數據的標準。