nginx的子进程通过epoll管理套接字
标签:
cgi、fastcgi、php-fpm、mod_php cgi
cgi是大众网关接口,用户通过浏览器来访谒执行再处事器上的动态措施,CGI是Web 处事器与CGI措施间传输数据的标准。准确来说是一种协议,单进程模式,启动一个CGI进程(php-cgi)这个进程会先加载php.ini的配置,通过配置 措置惩罚惩罚详情事情,例如加载配置中的PHP扩展等,最后动态解析PHP措施,措置惩罚惩罚完请求直接封锁了。每次请求经历整个生命周期。
fastcgi
fastcgi是快速通用网关接口,是CGI的优化升级。
FastCGI 致力于减少Web处事器与CGI措施之间进行互动的开销,从而使Web处事器可以同时措置惩罚惩罚更多的Web请求。与 CGI 为每个Web请求创建一个新的进程差别, FastCGI 使用连续的进程来措置惩罚惩罚一连串的Web请求,这些进程由FastCGI进程打点器打点,而不是Web处事器。
由于 FastCGI 措施并不需要不停孕育产生新进程,因此使用 FastCGI 可以大大降低Web处事器的压力并孕育产生较高的应用效率。
CGI 就是所谓的短保留期应用措施,而 FastCGI 就是所谓的长保留期应用措施, FastCGI 像是一个常驻(long-live)型的 CGI , FastCGI 可以一直执行着,而不会每次花费时间去fork(这也是 CGI 最为人诟病的 fork-and-execute 模式)。
php-fpm
fpm是PHP FastCgi运行模式的一个进程打点器,FastCgi是Web处事器(Nginx、Apache)和措置惩罚惩罚措施之间的一种通信协议。
PHP没有实现Http网络库,而是实现了FastCgi协议,通过与web处事器共同实现http的措置惩罚惩罚,web处事器措置惩罚惩罚http请求,将解析的功效通过fastcgi协议转发给PHP措施,,PHP措施措置惩罚惩罚完将功效返回给web处事器,完成请求返回给客户端。
fpm是一种多进程模型,它由一个master和多个worker进程构成。master进程启动时创建一个socket,但不会接收、措置惩罚惩罚请求,而是fork出多个worker子进程完成请求的接收及措置惩罚惩罚。
worker请求生命周期:期待请求、解析请求、请求初始化、执行脚本、封锁请求。一个worker进程只能措置惩罚惩罚一个请求,只有等一个请求措置惩罚惩罚完才华措置惩罚惩罚下一个请求。这与nginx的事件模型有很大区别,nginx的子进程通过epoll打点套接字,一个进程会同时措置惩罚惩罚多个请求,它长短梗阻的模型,只措置惩罚惩罚活跃的套接字。
master三种差别进程打点方法:静态模式(固定)、动态模式(动态)、按需模式(CGI)。
长处:1.兼容大都Web处事器2.比mod_php占内存小3.更多的配置项,包孕多版本PHP和suexec错误谬误1.配置庞大2.不被大家所熟知
> fastcgi与php-fpm的关系一句话解读:fastcgi只是通信应用协议,php-fpm就是实现了fastcig协议,并嵌入了一个 PHP 解释器。
mod_php
PHP以模块的方法运行在Apache中时,PHP解释器被“内嵌”在Apache的进程里。Apache不会挪用任何外部的PHP进程,因此这种方法使Apache与PHP能更好的通信。但是,当以这种方法运行PHP的时候,哪怕Apache供给的仅仅是静态的资源(如HTML),Apache的每个子进程也城市载入 mod_php,导致了比正常情况下更多的内存开销。
长处:1.易于安置和更新2.容配置错误谬误:1.仅能与Apache一起事情2.增加了Apache子进程内存开销3.当变动php.ini文件后,需要重启Apache
PHP面试经常被问cgi、fastcgi、php-fpm、mod_php的区别
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32466.html