CGI,FAST-CGI,PHP-CGI,PHP-FPM到底是什么关系

CGI

通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。

--以上来自维基百科.

[也就是说这个只是一个协议]
https://zh.wikipedia.org/wiki/通用网关接口#外部链接

通用网关接口最开始设计是为了解决各种不同计算机系统交换数据的问题.
我们把实现了这种协议的程序叫做CGI程序. 大多数语言都可以实现CGI协议. shell ,c++ ,php  python 等等. 只要你满足协议的要求即可.
想了解更多可以阅读 https://web.archive.org/web/20100127161358/

http://hoohoo.ncsa.illinois.edu/cgi/

大多数实现了CGI 的程序使用的都是一种 比较典型的prefork的方式.即每处理一个请求,就启动一个进程.处理完成后进程退出.
这样在早期的时候是可以的,因为请求量不大,那时候可能还没有并发的概念.
但是到后面请求变多了之后.这种方式就显现出了弊端. 如 :资源消耗严重, 更多的时间用在进程的创建上面.

人们需要改进一下这个协议.能够让工作更加高效.
于是fastCGI应运而生.

FAST-CGI
显而易见,这个就是CGI的晋级版. 那么fastCGI解决了哪些问题呢.

它不再是PREFORK的方式进行工作了,他启动一个进程监听在一个套接字上面

CGI使外部程序与Web服务器之间交互成为可能。CGI程序运行在独立的进程中,并对每个Web请求创建一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量创建和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。

与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI服务器管理,而不是web服务器。 当进来一个请求时,web服务器把环境变量和这个页面请求通过一个socket比如FastCGI进程与web服务器(都位于本地)或者一个TCP connection(FastCGI进程在远端的server farm)传递给FastCGI进程。

以上摘自维基百科

[也就是说 ,这个还是一个协议]

比较典型的  php-fpm  又叫  php fastcgi-progress-manage   就是启动了一个fastcgi管理程序. 来管理fastcgi进程池.当我们去PS php的进程的时候,会发现有一个master .多个worker .这个worker与Web服务器之间的交互使用的就是fastcgi协议.

到这里,我想大家都已经明白了。

CGI : 是一种协议,用户传输数据。

FASTCGI: 是CGI的升级版本,效率高于CGI。

PHP-CGI:  是PHP中对fast-cgi协议的一个实现。用来通过CGI协议与web服务器进行通信。

php-fpm:   是用来管理fast-cgi进行的一个程序。

Show Comments
备案信息: 京ICP备20002019号