cgi、fastcgi、php-cgi、php-fpm的关系

1. CGI

CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。php

CGI能够用任何一种语言编写,只要这种语言具备标准输入、输出和环境变量。如php,perl,tcl等。html

服务器接收到请求后,若是是index.html这样的静态文件,能够直接去相应的目录找到这个文件,而后返回给客户端,可是当发送的请求是index.php这样请求,显然这个是须要解析的,此时就须要服务器将这个请求传递给cgi程序解析,解析完成后返回结果。可是要传递什么内容呢,这个就是cgi来规定的。segmentfault

2. Fastcgi

Fastcgi是用来提升CGI程序性能的,是CGI的升级版,一种语言无关的协议服务器

服务器每次将请求传递给cig程序解析的时候都会解析配置文件,好比php.ini,想一想就知道这回影响性能,fastcgi会先启动一个master解析配置文件,初始化环境,而后再启动多个worker,当请求过来的时候master会传递给woker,而后当即去接受下一个请求。当worker不够用的时候会增长,当空闲的worker多的时候会停掉一些,这样的机制能够提升性能,节省资源。网络

3. php-cgi

  • PHP-CGI是php自带的Fast-CGI管理器.
  • php.ini修改以后,必须kill掉php-cgi再启动php.ini 才生效。不能够平滑的重启
  • 内存不能动态分配
  • 启动php,指定启动的worker ,长期驻留在内存里 ,用户访问php文件, php-cgi 处理请求,返回结果

4. Php-fmp

  • 非官方fastCgi进程管理器,后来php5.4开始,被官方收录了
  • 能够平滑重启php
  • 动态调度进程
  • 启动php,动态指定启动的worker ,长期驻留在内存里 ,根据来访压力动态增减worker的进程数量,用户访问php文件, php-fpm 处理请求,返回结果

php-cgi和php-fpm的关系呢?php-fpm

php54是以前是一种关系,php54以后另外一种关系。php54以前,php-fpm(第三方编译)是管理器,php-cgi是解释器。php54以后,php-fpm(官方自带),master 与 pool 模式。php-fpm 和 php-cgi 没有关系了。php-fpm又是解释器,又是管理器网上大部分说法:php-fpm 是管理php-cgi 的,是针对php54以前的工具

参考资料

https://www.awaimai.com/371.html性能

https://segmentfault.com/q/1010000000256516ui

http://cuishan.win/2017/02/05/cgi-fastcgi-php-cgi-php-fpm/htm

https://www.zhihu.com/question/55835080

相关文章
相关标签/搜索