浅聊CGI、FASTCGI、PHP-CGI、PHP-FPM

再谈论这个话题之前,先在脑中仔细区别一下这四者的关系,如果是有一些含混不清的,或许这篇拙文能带给您一点清晰地思路。


什么是CGI,HTTP权威指南这么定义--通用网关接口(Common Gateway Interface),可以用来装载程序以响应对特定URL的HTTP请求,并收集程序输出数据,将其放在HTTP响应中回送。说的明白点也就是处理各种需要的转换,定义输入输出的格式


注:CGI模型基本运行机制


听起来感觉CGI已经很厉害了,那为什么还需要有FASTCGI呢?一切都是冥冥中注定,但是CGI其中有一个缺点-对每一条CGI请求都引发新进程,每一个新进程都需要启动CGI解释器,加载配置,连接其他服务器等初始化工作,这个成本高吧?对服务器的负担大吧?我们每一个新进程都要重复性做这一个工作,那有没有什么办法优化他呢?

有需求就有生产力,FASTCGI为解决此问题诞生了,现在知道FASTCGI与CGI关系了吧。我们总结一下,他其实就是持久守护进程的CGI,消除为每一个请求新建和拆除新进程带来的性能消耗。


接下来什么是PHP-CGI呢?他其实是PHP的解释器,也是fastcgi,也就是解析请求,返回结果,但是他有一点low,就是在我们更改了php.ini文件之后需要重启才可以让配置文件生效,也就是不能平滑重启。

所以说有不足就会有生产力,此时FPM诞生,他是FASTCGI进程管理器,他支持平滑停止、启动的高级进程管理……更多关于他的内容可以参考官方手册,但是需要注意的是在php5.4版本之前,他是没有包含在PHP内核里面的,而是作为第三方存在,我们需要找到与源码版本相同的php-fpm版本进行打补丁,之后版本集成了他。


这是我个人的一点总结,如果有不正确不严谨地方恳切希望大家指出,共同学习!


图片与相关内容参考自HTTP权威指南

猜你喜欢

转载自blog.csdn.net/m0_37752084/article/details/79549283