CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。php
CGI能够用任何一种语言编写,只要这种语言具备标准输入、输出和环境变量。如php,perl,tcl等。html
服务器接收到请求后,若是是index.html这样的静态文件,能够直接去相应的目录找到这个文件,而后返回给客户端,可是当发送的请求是index.php这样请求,显然这个是须要解析的,此时就须要服务器将这个请求传递给cgi程序解析,解析完成后返回结果。可是要传递什么内容呢,这个就是cgi来规定的。segmentfault
Fastcgi是用来提升CGI程序性能的,是CGI的升级版,一种语言无关的协议服务器
服务器每次将请求传递给cig程序解析的时候都会解析配置文件,好比php.ini,想一想就知道这回影响性能,fastcgi会先启动一个master解析配置文件,初始化环境,而后再启动多个worker,当请求过来的时候master会传递给woker,而后当即去接受下一个请求。当worker不够用的时候会增长,当空闲的worker多的时候会停掉一些,这样的机制能够提升性能,节省资源。网络
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