• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

CGI、FastCGI和php-fpm

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

CGI(Common Gateway Interface),公共网关接口,它是Web服务器与外部应用程序(CGI程序)之间传递信息的接口标准。

web服务器一般只处理静态的请求,如果碰到一个动态请求,web服务器会根据这次请求的内容,然后fork一个进程启动CGI程序,这里就是指PHP的解析器,PHP解析器程序启动后,它就会解析php.ini文件,初始化执行环境,然后解析动态脚本,再把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新的子进程启动CGI程序,周而复始的进行。启动CGI程序需要读取配置文件、加载相关扩展等,这样的工作效率非常低下

简言之:当Web Server收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。

 

FastCGI是CGI的升级版,一种语言无关的协议,它可以在内存中管理CGI进程, FastCGI就像是一个常驻(long-live)型的CGI程序,它可以一直运行着.FastCGI进程管理器需要单独启动。启动FastCGI后,会生成一个FastCGI主进程和多个子进程.

当客户端请求Web服务器上的动态脚本时,Web服务器会将动态脚本通过TCP协议交给FastCGI主进程,FastCGI主进程根据情况,安排一个空闲的子进程来解析动态脚本,处理完成后将结果返回给Web服务器,Web服务器再将结果返回给客户端。该客户端请求处理完毕后,FastCGI子进程并不会随之关闭,而是继续等待主进程安排工作任务
简言之:FastCGI会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源

 

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器) 是php中的FastCGI进程管理器。进程包括master进程和worker进程。master进程只有一个,负责管理子进程。worker进程一般会有多个,每个进程中会嵌入一个PHP解析器,处理PHP代码。PHP的解释器是php-cgi。php-cgi只是个CGI程序,他自己本身只能解析请求,返回结果,不会管理进程。

感谢!

参考:

https://www.cnblogs.com/fps2tao/p/10730461.html

https://blog.csdn.net/IT_10/article/details/92801153

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap