CGI、PHP-CGI、FastCGI、PHP-FPM的区别

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

发表评论

登录后才能评论