CGI全稱是「公共網關接口」(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行「交談」的一種工具,其程序須運行在網絡服務器上。php
CGI能夠用任何一種語言編寫,只要這種語言具備標準輸入、輸出和環境變量。如php,perl,tcl等。html
服務器接收到請求後,若是是index.html這樣的靜態文件,能夠直接去相應的目錄找到這個文件,而後返回給客戶端,可是當發送的請求是index.php這樣請求,顯然這個是須要解析的,此時就須要服務器將這個請求傳遞給cgi程序解析,解析完成後返回結果。可是要傳遞什麼內容呢,這個就是cgi來規定的。segmentfault
Fastcgi是用來提升CGI程序性能的,是CGI的升級版,一種語言無關的協議服務器
服務器每次將請求傳遞給cig程序解析的時候都會解析配置文件,好比php.ini,想一想就知道這回影響性能,fastcgi會先啓動一個master解析配置文件,初始化環境,而後再啓動多個worker,當請求過來的時候master會傳遞給woker,而後當即去接受下一個請求。當worker不夠用的時候會增長,當空閒的worker多的時候會停掉一些,這樣的機制能夠提升性能,節省資源。網絡
php-cgi和php-fpm的關係呢?php-fpm
php54是以前是一種關係,php54以後另外一種關係。php54以前,php-fpm(第三方編譯)是管理器,php-cgi是解釋器。php54以後,php-fpm(官方自帶),master 與 pool 模式。php-fpm 和 php-cgi 沒有關係了。php-fpm又是解釋器,又是管理器網上大部分說法:php-fpm 是管理php-cgi 的,是針對php54以前的工具
https://www.awaimai.com/371.html性能
https://segmentfault.com/q/1010000000256516ui
http://cuishan.win/2017/02/05/cgi-fastcgi-php-cgi-php-fpm/htm