PHP之单线程和多线程的理解(CGI,FastCGI,php-cgi,php-fpm)

it2025-10-06  2

先说结论:PHP单进程(不是单进程的话,面试官说的)

 

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的平滑重载

最新回复(0)