有关CGI、FastCGI和PHP-fpm的简述

来源:互联网 发布:淘宝怎样做充值话费 编辑:程序博客网 时间:2024/06/11 02:33

1、CGI概念

CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。

在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。

只要某种语言具有标准输入、输出和环境变量,如perl、php、C等,就可以用来编写CGI程序。

工作原理:

1.浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL。2.服务器收发到请求。3.服务器执行指定CGI应用程序。4.CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容。5.CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。6.网络服务器把结果返回到浏览器中。

2.FastCGI

Fastcgi是CGI的更高级的一种方式,是用来提高CGI程序性能的。

FastCGI就像是一个常驻(long-live)型的CGI程序,它可以一直运行着。FastCGI程序也可以和Web服务器分别部署在不同的主机上,它还可以接受来自其他Web服务器的请求。

3、PHP-fpm (PHP-FastCGI Process Manager)

他是一个实现了Fastcgi协议的程序,用来管理Fastcgi起的进程的,即能够调度php-cgi进程的程序。

4、CGI相较于Fastcgi而言其性能瓶颈(转自知乎)

CGI针对每个http请求都是fork一个新进程来进行处理,处理过程包括解析php.ini文件,初始化执行环境等,然后这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求动态资源,那么web服务器又再次fork一个新进程,周而复始的进行。

Fastcgi则会先fork一个master,解析配置文件,初始化执行环境,然后再fork多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是Fastcgi的对进程的管理。大多数Fastcgi实现都会维护一个进程池。

master和worker进程:    master进程只有一个,负责监听端口,接收来自web server的请求。    worker 有一到多个,具体数量会在fpm的配置中定义。    每个进程内部都会嵌入PHP解析器,是PHP代码执行的地方。即worker来处理PHP代码。    master监听端口是 9000,通过Nginx方向代理9000端口。

5、FastCGI与CGI特点:

对于CGI来说,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重初始化全部数据结构。而使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

由于FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数

原创粉丝点击