1. 什么是CGI
CGI的全称是“通用网关接口”。它是一种通用的WEB服务器和应用程序之间的接口标准,能够让WEB服务器请求运行在另外一台机器上的程序,并将程序执行结果返回给WEB服务器。
大多数编程语言都支持CGI方式与WEB服务器进行交互,比如Perl、Python、Ruby、C/C++等。用户发起请求时,WEB服务器将请求信息传递给CGI程序,CGI程序逻辑处理并返回结果给WEB服务器,最终将结果响应给用户。这样,用户就可以享受到更加便捷快速的互联网服务。
2. 什么是Fast-CGI
Fast-CGI是CGI的改进版本,在已经运行好的守护进程中运行CGI程序,这样就避免了频繁地产生或销毁进程,从而提升了性能。相比于CGI,Fast-CGI使用了TCP连接进行通信,具有更高的性能和扩展性。
另外,Fast-CGI以进程池的方式运作,共享已加载的代码,比起CGI更加节省服务器资源。在实际应用中,我们可以使用启动多个Fast-CGI进程的方式提升性能。
3. 什么是PHP-FPM
PHP-FPM(FastCGI Process Manager)是PHP官方推出的Fast-CGI进程管理器。它利用Fast-CGI提升了PHP脚本的性能,拥有更高的执行效率和更低的内存占用率。
与Fast-CGI不同,PHP-FPM并不是像Fast-CGI一样把所有类似CGI命令传递给一个进程池进行处理,它将进程和线程分离,每个进程串行执行,节约了额外的内存并规避了线程安全性问题。
4. CGI、Fast-CGI、PHP-FPM的关系
从图中可以便捷地看出CGI、Fast-CGI、PHP-FPM的发展关系。CGI是最初的网景公司提出的Web应用接口,Fast-CGI是对CGI的改进,将常驻内存的进程提供给多个客户端请求。PHP-FPM则是PHP强化自身性能的一个服务器,它支持Fast-FGI进程管理。PHP-FPM的出现基于Fast-CGI协议,将PHP和Web服务器解耦,把PHP脚本放到连接池,共享服务器的进程,从而减少每次创建请求时开销,从而提升PHP运行效率。
总之,CGI、Fast-CGI、PHP-FPM都是应用在Web开发中的重要技术。它们有着紧密的联系,而PHP-FPM是目前应用最为广泛的一种方式。
以下是Fast-CGI和PHP-FPM的关系图,可以更加清晰地理解它们的关系: