一、fast-cgi/cgi
fast-cgi和cgi都是web服務器程序與url處理程序兩者之前的應用層網絡協議,現在都是用fast-cgi協議,那麼現的url處理程序也都是實現了fast-cgi
二、php-fpm/php-cgi
**php-fpm**是實現**fast-cgi協議**的一個**程序**,
**php-cgi**是實現了**cgi協議**的一個**程序**
這是網上很多的理論,這兩個程序就是實現對應協議的兩個程序
那php-fpm和php-cgi這兩個程序有什麼不同點和相同點呢?
一、php-fpm和php-cgi相同點
相同點它們都是php解釋器都是用來解釋php源代碼,處理web服務器傳來的對應協議參數,然後根據對應協議輸出處理結果給web服務器。
二、php-fpm和php-cgi不同點
不同點就是兩者與web服務器程序通信使用的網絡協議不同,php-fpm程序與web服務器程序通信用的是fast-cgi協議,php-cgi程序與web服務器程序通信用的是cgi協議。
當然不可能平白無故的使用兩個協議,php-cgi程序與php-fpm程序的對web服務器程序的請求處理機制是不同的。
php-cgi程序是每次都重新加載新的程序來處理web服務器程序的請求,所以每次處理都有相同的操作,如解析php.ini文件,初始化執行環境,然後開始編譯處理php源代碼,再以cgi協議規定的格式返回處理結果給web服務器程序,然後退出cgi程序進程。
php-fpm程序,則不一樣,php-fpm程序會先啓一個master程序,解析配置文件,初始化執行環境,然後再啓動多個worker程序。當web服務器程序的請求請求過來時,master程序會把請求傳遞給一個worker程序,由worker程序處理請求後,再以fast-cgi協議規定的格式返回處理結果給web服務器程序,返回結果後,worker程序不會被銷燬,而是等下次處理,這樣就避免了重複的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啓動幾個worker等着;當然空閒worker太多時,也會停掉一些,這樣就提高了性能,也節約了資源。
三、phpv7.2.19的php-cgi
phpv7.2.19沒有php-fpm程序了,現在只有php-cgi程序了,直接由php-cgi程序實現了fast-cgi協議,與web服務器程序通迅機制跟之前的php-fpm程序一樣的。
通過瀏覽器由http協議訪問服務器,由web服務器程序通過fast-cgi協議向php-cgi程序訪問,php-cgi程序輸出當前運行模式給web服務器程序,最終瀏覽器收到的是fast-cgi運行模式。