CGI(Common Gateway Interface)称为通用网关接口,是Web Server和Web Application之间数据交换的一种协议,注意它是一种协议,跟语言没有关系。
CGI 针对每个HTTP请求都会fork一个新进程来进行处理,然后把这个进程处理完的结果通过Web服务器转发给用户,刚刚fork的新进程也随之退出,如果下次用户再请求动态资源,那么Web 服务器又再次fork一个新进程,如此周而复始循环往复。
FastCGI,也是Web Server和Web Application之间数据交换的一种协议。注意,它仍然是一种协议,跟语言没有关系。不同于CGI每个请求都创建一个新进程,FastCGI则会先fork一个master进程,然后再fork多个worker进程(与Nginx有点像),当HTTP请求过来时,master进程会将其传递给一个worker进程,然后立即可以接受下一个请求,这样就避免了重复的初始化操作,效率自然也就提高了。而且当worker进程不够用时,master进程还可以根据配置预先启动几个worker进程等着;当空闲worker进程太多时,也会关掉一些,这样不仅提高了性能,还节约了系统资源。
PHP-CGI是CGI协议在PHP上的实现,PHP-FPM(FastCGI Process Manager)称为FastCGI 进程管理器,是FastCGI协议在PHP上的实现。
PHP-FPM负责管理一个进程池来处理来自Web服务器的HTTP动态请求,在PHP-FPM中,master进程负责与Web服务器进行通信,接收HTTP请求,再将请求转发给worker进程进行处理,worker进程主要负责动态执行PHP代码,处理完成后,将处理结果返回给Web服务器,再由Web服务器将结果发送给客户端。这就是PHP-FPM的基本工作原理。
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/phpe/3715.html