PHP-CGI=>PHP-FPM

PHP 解释器的执行,主要有三者模式,cgi, fast-cgi , mod_php。( Web开发有3P:Perl、Python、PHP ) 


cgi : php解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以CGI规定的格式返回处理后的结果,退出进程。

fastcgi :会先启动一个master进程,解析php.ini和初始化执行环境,然后启动多个worker进程(进程池),php请求都发到master进程,通过master进程分发的worker进程进行处理。master进程充当着worker进程管理者角色 ,优化性能和节约资源;

php_mod:是以模块的形式嵌入到Apache Web服务器的php解析器(加载到内存),它运行在Apache进程里。而cgi和fastcgi都是独立运行的进程,所以就算cgi和fastcgi出问题了也不会影响到web服务器的运行;

CGI 和FastCGI : 启动PHP 解释器处理PHP 请求。都是以独立进程的形式存在。

mode_php 和FastCGI 每个进程的生命周期内能够处理多个请求,CGI 在单个进程中只能处理一个请求销毁进程。

 

php-cgi CGI 协议的实现,就是PHP 解析器,在每个请求时都会启动一个进程, 无法实现平滑重启 。

php-fpm 是FastCGI 协议的实现

  • 一个php-fpm 进程可以处理多个请求,会启动多个php-cgi 程序。
  • php-fpm 可以实现平衡重启。修改php.ini 后,当启用新的worker 会使用新的配置。解析配置文件,初始化执行环境.
  • PHP-FPM只是FastCGI的管理者;代替FastCGI负责处理web请求

PHP-CGI=>PHP-FPM_第1张图片

PHP-CGI=>PHP-FPM_第2张图片

PHP-FPM ( php解析器 ) 是一个程序,是用来管理PHP-CGI的 ( PHP-FPM是FastCGI的管理器 );

CGI,FastCGI都是标准。PHP-FPM是实现 , 通讯技术来类比:3G,4G是标准,移动4G卡是实现;

PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置的优点,相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼;

 

通俗的可以把服务器看作餐厅,用户请求看作来用餐的顾客,服务器处理请求看作解决顾客的就餐问题(响应输出一份饭)。

服务器上静态资源看作已做好的饭,只要放到餐盒里就可以返回给顾客,动态资源需要厨房大厨现成做份再放到餐盒里返回给顾客。

php_mod这个大厨有个特点,看见有顾客进门就点火,不管顾客要不要现做的,有点浪费资源

php_fpm这个大厨有好多小弟一直点着火(多个处理进程),等有顾客说要现做,大厨就安排小弟做份返回给客户

cgi也是个大厨,不过他等到顾客要现做,他才点火,做饭,然后熄火。等待下一个要现做的到来

fastcgi呢就是个大厨雇了一帮小弟,专门做需要现场做的饭,大厨只管分派任务,小弟真正操锅做饭

 

 

FastCGI 是一个协议,它是应用程序和 WEB 服务器连接的桥梁。Nginx 并不能直接与 PHP-FPM 通信,而是将请求通过 FastCGI 交给 PHP-FPM 处理。

你可能感兴趣的:(PHP函数)