PHP-FPM 是PHP FastCGI Process Manager的简称。
CGI是指通用网关接口,其实就是HTTP服务器分发请求的接收程序(比如PHP解释器),同时它也规范了”分发-接收“这一通讯过程的格式。比如Nginx分发动态请求给PHP解释器(PHP解释器就是一个CGI),可能需要POST参数,HTTP headers参数等,这些都在CGI中有标准化规范。
FastCGI是为了提升CGI速度而生的,CGI速度慢在每次处理请求都要做一些解析配置和初始化环境的工作,而FastCGI实现了对CGI的有效管理——通过master进程把任务分配给worker进程,减少CGI进程的初始化(解析php.ini等)、创建、销毁等开销。
所以PHP解释器只是一个php-cgi,而PHP-FPM按着FastCGI协议,加强了对php-cgi的管理,实现了常驻内存,并且被PHP官方认可,纳入PHP内核。
PHP-FPM支持配置的平滑变更是通过新的配置在新的worker中生效完成的。而mod模式Apache无法平滑变更是因为每个Apache进程都需要加载mod_php,解释模块和HTTP服务绑定在了一起,无法实现分离,变更配置只得重启。
值得一提的是,Apache这样的内置mod方式,也减少了通讯消耗,速度更快。
网友评论