应用场景
php-fpm是个中间件,在需要php解释器来处理.php文本时会用到php-fpm。自从php5.3.3以后就将php-fpm集成在php内核中。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
相关概念
1.CGI
CGI(common gateway interface )通用网关接口,是webserver和web应用程序交流时的一组接口规范。
2.Fast-cgi
FastCGI可以理解为一种协议,用于web服务器(nginx,Apache)和处理程序间进行通信,是一种应用层通信协议。是cgi协议的升级版
fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新fork一个进程了,从而避免了每个请求进程创建和终止的开销,大大提高了效率。
3.Php-cgi
php-cgi是一个进程。php-cgi实现了cgi这种协议,但是它是单进程的,一个进程处理一个请求,处理结束后进程就自我销毁。
4.Php-fpm
是对php-cgi的改进版,它直接管理多个php-cgi进程/线程。也就是说,php-fpm是php-cgi的进程管理器,因此它算是fastcgi协议的实现。在一定程度上讲,php-fpm与php的关系,和tomcat对java的关系是类似的.
5.cgi进程/线程:
在php上,就是php-cgi进程/线程。专门用于接收web server的动态请求,调用并初始化zend虚拟机。
6.cgi脚本:
7.zend虚拟机:
对php文件做词法分析、语法分析、编译成opcode,并执行。最后关闭zend虚拟机。
8.cgi进程/线程和zend虚拟机的关系:
9、cgi、fastcgi、php-cgi和php-fpm之间的关系

1.png
未出现php-fpm之前
web server对cgi进程/线程来说,它的作用就是发起动态处理请求,传递一些参数和环境变量,最后接收cgi的返回结果。通俗点说就是当接收到一个请求时,webserver临时启动一个cgi解释器,并通过cgi协议转发要运行的内容。当cgi脚本运行结束后,将结果返回给webserver,然后cgi解释器进程自我销毁。假如有10000个请求进来,那么就会先后启动10000个cgi解释器,这种方法效率极低。
作者:冬日大草原的黄昏
链接:https://www.jianshu.com/p/99d478ea1330
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
