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

CGI(Common Gateway InterFace)php

既然webserver想把這個請求交給能夠處理的人來作,是否是該告訴人家一些基本的,而且人家看得懂的信息信息?

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

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

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

FastCGI網絡

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

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

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

PHP-CGIurl

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

缺陷:spa

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

PHP-FPM

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

一些進步:

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

圖片描述

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


圖片描述

相關文章
相關標籤/搜索