博客 / 詳情

返回

CGI,FASTCGI,PHP-CGI,PHP-FPM 概念

CGI(Common Gateway InterFace)

既然webserver想把這個請求交給可以處理的人來做,是不是該告訴人家一些基本的,並且人家看得懂的信息信息?

Webserver會傳那些基本信息給後端處理請求的解析器呢?url,get請求的query_string,POST數據,Http Header等,那麼CGI就規定了要傳哪些參數,以及以一個什麼樣的格式傳過去,後端處理完這個請求,又該以什麼樣的格式傳回。

概念:CGI(Common Gateway Interface)全稱是“通用網關接口”,WEB 服務器與PHP應用進行“交談”的一種工具,其程序須運行在網絡服務器上。CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。也就是説,CGI用來在web服務器與後端實現了CGI協議的程序之間提供一個溝通的橋樑,降低兩者之間的耦合性。

缺陷:採用了效率低下的”FE”模式,就是Fork-And-Execute,每個web請求進來之後,都會啓動一個php程序,處理完請求後退出,浪費資源,高請求數下,服務器宕機。

FastCGI

有沒有效率更高的解決辦法呢,可以不可一完事先別走呢?

這就衍生出了FastCGI,也可以理解為一種協議,在CGI協議上進行強化,從原來的”FE”模式進化為”LL”模式,即Long-Live模式,運行完畢之後,常駐內存。同樣,它也是語言無關性的,只要你具有標準輸入輸出和環境變量,那麼就OK。

FastCGI會先啓動一個Master進程,Master讀取和處理基礎的配置文件,初始化環境,之後依據配置生成多個worker進程來處理請求。並且可以動態調整worker的數量。

PHP-CGI

Fast-cgi聽起來很不錯,有沒人用用它的呀?php-cgi是實現FastCGI協議的php解釋器。

缺陷:

更改php.ini配置後需要重啓php-cgi進程,且會殺死正在運行的進程。
單進程,不具備進程管理能力,效率很低。

PHP-FPM

概念:一個實現FastCGI多進程(進程池)管理的管理器。開啓之後,會看到多個php-cgi進程,它們都由php-fpm管理。

一些進步:

修改配置後,平滑過渡,新的worker進程使用新的配置,正在運行的worker進程處理完當前請求後自動shutdown。多進程的效率比單進程更高。

圖片描述

轉載來源:http://lib.csdn.net/article/p...


圖片描述

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.