对于cgi fastcgi php-fpm php-cgi的解释,网上挺多的,能够百度查看,下面是我本身的理解php
名词术语:web
一、web服务器 二、通讯协议 三、进程、主进程、子进程 四、php解析器 CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通讯的一个标准、 接口、协议【协议】 FastCGI:CGI协议的升级版【协议】 PHP-CGI: 实现了CGI接口协议的PHP脚本解析器【程序】 PHP-FPM: 管理和调度php-cgi进程,进而实现了FastCGI接口协议的程序【程序】
webserver只能处理静态文件,对于php这样的动态脚本无能为力,只能交给php本身来处理, 因而有了下面这个流程:
可是上面架构有个性能问题,CGI对每一个请求会parse一遍对应脚本的配置文件(如php.ini), 加载配置和扩展,初始化执行环境,性能很是差,全部有了下面的流程:
那么实现Fastcgi协议的程序,如PHP-FPM是怎么作的呢?首先,Fastcgi会先启一个master进程,解析配置文件,初始化执行环境,而后再启动多个worker进程,这个worker就是php-cgi。当请求过来时,master会传递给一个worker,而后当即能够接受下一个请求。这样就避免了重复的劳动,效率天然是高。并且当worker不够用时,master能够根据配置预先启动几个worker等着,好比20worker,固然空闲worker太多时,也会停掉一些,这样就提升了性能,也节约了资源。这就是fastcgi的对进程的管理。segmentfault
下面是php-fpm配置文件里面的对worker数量的配置项:服务器
; The maximum number of processes FPM will fork. This has been design to control ; the global number of processes when using dynamic PM within a lot of pools. ; Use it with caution. ; Note: A value of 0 indicates no limit ; Default Value: 0 ; process.max = 128
那么最大的worker进程数就是128架构
更多的对FastCGI的解释php-fpm
fastcgi是基于cgi架构的扩展,他的核心思想就是在web server和具体cgi程序之间创建一个智能的可持续的中间层,统管cgi程序的运行,这样web server只须要将请求提交给这个层,这个层再派生出几个可复用的cgi程序实例,而后再把请求分发给这些实例,这些实例是可控的,可持续,可复用的,所以一方面避免了进程反复fork,另外一方面又能够经过中间层的控制和探测机制来监视这些实例的运行状况,根据不一样的情况fork或者回收实例,达到灵活性和稳定性兼得的目的。
参考文档性能
https://segmentfault.com/q/1010000000256516spa
http://blog.csdn.net/zhuanshenweiliu/article/details/46413241.net