cgi ,fastcgi,PHP-FPM和php-cgi

  1. cgi ------协议接口
    每个进到服务器的请求,cgi接口会对进行解析,比如一个PHP文件请求来了,cgi会知道这个是PHP文件,需要PHP进行运行,所以就启动PHP解析器解析php.ini文件和初始化PHP环境。当请求结束后,又会关闭PHP,当第二次有关PHP请求到来的时候重复上面的动作。所以cgi协议接口是低效的。

  2. fastcgi----协议接口;
    为了避免cgi接口的这些问题,有人写出了fastcgi接口。fastcgi接口不会想cgi接口那样每次接到请求都重新启动PHP,解析php.ini文件初始化环境等操作。fastcgi是一个cgi进程管理者,fastcig先启动一个master,他会解析php.ini文件,初始化php执行环境。然后在启动多个work,每次有关于php的请求进来的时候,master都会把请求分发给一个work,然后接受下一个请求。如果请求很多,work不够用,master还会根据配置在开几个work使用。当闲置的work太多的时候,fastcgi还会根据配置关闭若干work。这样fastcgi的效率就显著高于cgi接口。这里的work可以看成进程,fastcgi其实就是一个管理进程池的接口。

  3. PHP-FPM---程序;
    php-fpm是用来管理fastcgi,负责调度php-cgi进程。

  4. php-cgi----解释器;
    php-cgi只是一个cgi程序,只负责解析请求;

总的来说,fastcgi是一种cgi的升级版本,负责更快更高效的调度进程;服务器启动的时候会调用php-fpm,然后php-fpm会启用fastcgi接口,解析php.ini文件,初始化执行环境,创建一个master和多个work。当服务器(eg:nginx)接收到localhost/index.php请求,会把关于php请求发送给php-fpm,master拿到请求之后,会把求情分配给一个work进行解析,然后等待接受下一个请求。

猜你喜欢

转载自blog.csdn.net/weixin_38674371/article/details/78317745