先说结论:PHP多进程
为什么说PHP多进程,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用
CGI :通用网关接口
是用来负责web服务器和动态语言通信的协议,当发现请求是静态文件时,直接去文件中查找。当发现请求是 php结尾的时,将请求转发给php-cgi进行处理,当请求处理完成后,将结果返回给 web服务器。
缺点:
(1)当每次接收到请求后,都会开一个php-cgi 进程去解析这个web请求 , 并发量稍微一多,就会消耗大量资源【无法处理高并发】
(2)接口安全性较差
php-cgi:PHP的解析器
是对CGI的应用
php-cgi会处理和PHP相关的请求。php-cgi会先解析php.ini文件,然后初始化环境,处理请求,再以CGI规定的格式返回处理后的结果,退出进程
FastCGI:(快速通用网关接口)
顾名思义,FastCGI是CGI的升级版, 是用来提高CGI程序性能。它不会对每个Web服务器发送来的请求都开一个进程,而是会提前生成好一些进程【可以是固定的,也可以是动态】
php-fpm:(php-cgi的管理器)
php-fpm对php-cgi不是完全管理,而是请求转发
PHP-fpm是对FastCGI的应用
FastCGI会先启动一个master进程,解析配置文件,初始化执行环境,然后再启动多个worker进程。当请求来时,master会传递给一个worker,然后立即可以接受下一个请求。当worker不够时,master可以现根据配置预先启动几个worker等着;当进程太多时,停掉一些worker
每当修改php.ini文件后,重启php-fpm就可以实现 php-cgi的平滑重载