php 中 fastcgi与cgi的关系,何为fastcgi,cgifastcgi
fastcgi是语言无关的、可伸缩架构的cgi开放扩展,其主要行为是将cgi解释器进程保持 在内存中并因此获得较高的性能。众所周知,cgi解释器的反复加载是cgi性能低下的主要原因, 如果cgi解释器保持在内存中并接受fastcgi进程管理器调度,则可以提供良好的性能、伸缩性、 fail-over 特性等。
fastcgi的工作原理是:
(1) fastcgi进程管理器自身初始化,启动多个cgi解释器进程(多个php-cgi进程)并等 待来自web server的连接。在本文中,采用php-fpm进程管理器启动多个php-cgi fastcgi进 程。启动php-cgi fastcgi进程时,可以配置以tcp和unix套接字两种方式启动。
(2) 当客户端请求到达web服务器(nginx)时,web服务器将请求采用tcp协议或unix 套接字方式转发到fastcgi主进程,fastcgi主进程选择并连接到一个cgi解释器(子进程)。 web服务器将cgi环境变量和标准输入发送到fastcgi子进程php-cgi。
(3)
fastcgi子进程完成处理后将标准输出和错误信息从同一连接返回web服务器(nginx).
当fastcgi子进程关闭连接时,请求便告知处理完成。fastcgi子进程接着等待并处理来自fastcgi 进程管理器的下一个连接。而在一般的普通cgi模式中,php-cgi在此便退出了。
所以,你可以想象普通的cgi模式有多慢。每一个web请求php都必须重新解析php.ini、 重新载入全部扩展并重新初始化全部数据结构。使用fastcgi,所有这些都只在进程启动时发生 一次。一个额外的好处是,持续数据库连接(persistent database connection)可以工作。
php fastcgi 的优点:
(1) php脚本运行速度更快。php解释程序被载入内存而不用每次需要时从存储器读取, 此举极大提升了依靠脚本运行站点的性能。
(2) 须要使用的系统资源更少。由于服务器不用在每次需要时都载入php解释程序,你可 以将站点的传输速度提升很多而不必增加cpu负担。
(3) 不需要对现有的代码作任何改变。运行在apache+php上的程序,无须修改即可适用 于 php 的 fastcgi。


















