對於cgi fastcgi php-fpm php-cgi的解釋,網上挺多的,可以百度查看,下面是我自己的理解
名詞術語:
<code>1、web服务器 2、通信协议 3、进程、主进程、子进程 4、php解析器 CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准、 接口、协议【协议】 FastCGI:CGI协议的升级版【协议】 PHP-CGI: 实现了CGI接口协议的PHP脚本解析器【程序】 PHP-FPM: 管理和调度php-cgi进程,进而实现了FastCGI接口协议的程序【程序】 </code>
<code>webserver只能处理静态文件,对于php这样的动态脚本无能为力,只能交给php自己来处理, 于是有了下面这个流程: </code>
<code>但是上面架构有个性能问题,CGI对每个请求会parse一遍对应脚本的配置文件(如php.ini), 加载配置和扩展,初始化执行环境,性能非常差,所有有了下面的流程: </code>gi
如PHP-FPM是怎麼做的呢?首先,Fastcgi會先啟動一個master進程,解析設定文件,初始化執行環境,然後再啟動多個worker進程,這個worker就是php-cgi。當請求過來時,master會傳遞給一個worker,然後立即可以接受下一個請求。這樣就避免了重複的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啟動幾個worker等著,比如20worker,當然空閒worker太多時,也會停掉一些,這樣就提高了性能,也節約了資源。這就是fastcgi的對流程的管理。
下面是php-fpm設定檔裡面的對worker數量的設定項:<code>; 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</code>那麼最大的worker進程數就是128
更多的對FastCGI的解釋
http://blog.csdn.net/zhuanshenweiliu/article/details/46413241<code> fastcgi是基于cgi架构的扩展,他的核心思想就是在web server和具体cgi程序之间建立一个智能的可持续的中间层,统管cgi程序的运行,这样web server只需要将请求提交给这个层,这个层再派生出几个可复用的cgi程序实例,然后再把请求分发给这些实例,这些实例是可控的,可持续,可复用的,因此一方面避免了进程反复fork,另一方面又可以通过中间层的控制和探测机制来监视这些实例的运行情况,根据不同的状况fork或者回收实例,达到灵活性和稳定性兼得的目的。</code>://segmentfault.com/q/1010000000256516
以上就介紹了Nginx、CGI、FastCGI、PHP-CGI、PHP-FPM處理流程,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。