1. 程式人生 > >cgi ,fastcgi,PHP-FPM和php-cgi

cgi ,fastcgi,PHP-FPM和php-cgi

  1. cgi ------協議介面
    每個進到伺服器的請求,cgi介面會對進行解析,比如一個PHP檔案請求來了,cgi會知道這個是PHP檔案,需要PHP進行執行,所以就啟動PHP解析器解析php.ini檔案和初始化PHP環境。當請求結束後,又會關閉PHP,當第二次有關PHP請求到來的時候重複上面的動作。所以cgi協議介面是低效的。

  2. fastcgi----協議介面;
    為了避免cgi介面的這些問題,有人寫出了fastcgi介面。fastcgi介面不會想cgi介面那樣每次接到請求都重新啟動PHP,解析php.ini檔案初始化環境等操作。fastcgi是一個cgi程序管理者,fastcig先啟動一個master,他會解析php.ini檔案,初始化php執行環境。然後在啟動多個work,每次有關於php的請求進來的時候,master都會把請求分發給一個work,然後接受下一個請求。如果請求很多,work不夠用,master還會根據配置在開幾個work使用。當閒置的work太多的時候,fastcgi還會根據配置關閉若干work。這樣fastcgi的效率就顯著高於cgi介面。這裡的work可以看成程序,fastcgi其實就是一個管理程序池的介面。

  3. PHP-FPM---程式;
    php-fpm是用來管理fastcgi,負責排程php-cgi程序。

  4. php-cgi----直譯器;
    php-cgi只是一個cgi程式,只負責解析請求;

總的來說,fastcgi是一種cgi的升級版本,負責更快更高效的排程程序;伺服器啟動的時候會呼叫php-fpm,然後php-fpm會啟用fastcgi介面,解析php.ini檔案,初始化執行環境,建立一個master和多個work。當伺服器(eg:nginx)接收到localhost/index.php請求,會把關於php請求傳送給php-fpm,master拿到請求之後,會把求情分配給一個work進行解析,然後等待接受下一個請求。