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