CGI 和 FastCGI
CGI(Common Gateway Interface,公共网关接口)是一种标准协议,这种协议可以为一个应用程序和一个 Web 浏览器之间进行交互提供通信支持。CGI 最早出现于 1993 年,所有版本的 IIS 都为 CGI 提供了支持。在 IIS 上运行 CGI 时,CGI 处理请求的方式存在一些问题。对于 CGI 应用程序处理的每个新请求,IIS 都必须创建一个新的进程,待进程执行结束后,再关闭该进程。IIS 可以迅速地处理请求,但是,启动和停止进程的开销可能会成为性能瓶颈,这就是在 IIS 上运行 CGI 时,CGI 处理请求方式存在的问题。因此,IIS 引入了 FastCGI。 FastCGI能够部分解决上述性能瓶颈问题。
FastCGI (C:\Windows\System32\inetsrv\iisfcgi.dll)是一种新版本的 CGI,能满足大多数原有的 CGI 规范。然而,FastCGI 并没有在请求处理完毕时关闭一个进程,而是令这个进程继续运行,并处理其他请求。与 CGI 类似,FastCGI 也是单线程的,但是与 CGI 相比,当使用 FastCGI 时,服务器可以处理更多的请求,这是因为,进程仍然处于打开的状态。在 IIS 7.0 中,FastCGI 是使用内置的 API 实现的,并且被实现为一个本机的模块。
为什么要使用 FastCGI 呢?这是因为目前仍然存在大量的 PHP 应用程序,这些应用程序得到了广泛的应用。尽管这些应用程序通常使用了 CGI 版本或 ISAPI 版本的 PHP,但是,FastCGI 能够进一步提高这些应用程序的运行性能。
因为 FastCGI 是一种单线程的应用程序,因此必须启动多个线程来处理多个请求。这些进程可以汇集到一个进程池,组成不同的进程组,这样便可以统一管理这些进程组。一个进程组的属性可以是托管的,举例来说,一个进程组中的进程数量,以及一个进程在回收之前可以处理的请求数量等,都属于进程组的属性,并且可以受托管。一个进程组中可以包含多个进程,FastCGI 也可以同时运行多个进程组,并且每个进程组都可以拥有自己的设置。