cgi和fast-cgi以及php-fpm的聯絡和區別

葡萄酒不吐葡萄皮發表於2019-02-16

簡單粗暴版本:
cgi(公共閘道器介面)

        ||

根據nginx配置檔案,知道不是靜態檔案 需要去找PHP解析器來處理

        ||
            
帶著URl,POST的資料、HTTP Header 以及查詢字串
        ||
      

會啟動對應的CGI程式,這裡就是PHP的解析器

        ||

PHP解析器會解析php.ini檔案,初始化執行環境

         ||

處理請求,再以規定CGI規定的格式返回處理後的結果,退出程式

        ||

web server再把結果返回給瀏覽器

好了,CGI是個協議
Fastcgi是用來提高CGI程式效能的。

PHP解析器會解析php.ini檔案,初始化執行環境
準的CGI對每個請求都會執行這些步驟 太累了對吧 而且處理每個時間的時間會比較長
首先,Fastcgi會先啟一個master,解析配置檔案,初始化執行環境,然後再啟動多個worker。當請求過來時,master會傳遞給一個worker,然後立即可以接受下一個請求。這樣就避免了重複的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啟動幾個worker等著;當然空閒worker太多時,也會停掉一些,這樣就提高了效能,也節約了資源。這就是fastcgi的對程式的管理。

那PHP-FPM又是什麼呢?是一個實現了Fastcgi的程式,被PHP官方收了。

大家都知道,PHP的直譯器是php-cgi。php-cgi只是個CGI程式,他自己本身只能解析請求,返回結果,不會程式管理 所以就出現了一些能夠排程php-cgi程式的程式。

相關文章