php cgi&fastcgi&php-fpm

只愿长相守 提交于 2020-10-03 05:27:49

CGI(Common Gateway Interface),通用网关接口。设置了web server的外部程序的规范。

简单理解,就类似于php的接口,定义了输入、环境变量、输出的规范。

interface Cgi
{
   function input();
   function env();
   function output();       
}
标准输入 STDIN (get方式的请求,不放在标准输入中。post可以。)
环境变量  系统环境变量+当有http请求时(http服务器+客户端+cgi传输过程的信息),如php的$_SERVER信息是从此处获取的
标准输出 STDOUT ((mime类型 / location / 状态码)作为第一行 + 空行 + 输出内容)

 

cgi是运行在服务器上的,用于服务器与程序间的交互。

任何遵守cgi规范的程序都可以称为cgi程序。

php经常使用的服务器是nginx或Apache。

 

不过cgi有个硬伤,每次一个请求过来,都需要重新fork一个新的cgi进程,请求结束再kill掉该进程。若是有大量的请求过来,将直接搞摊服务器。

fastcgi就是为了处理这种情况而诞生的 ,每次fork一个cgi进程,请求结束并不会kill掉该进程,而是放回cgi池子,等待下一个请求。

有这么多的cgi进程,为了进一步管理这些cgi进程,php-fpm诞生了。

php-fpm有一个master进程和N个worker进程,master进程是管理worker进程的,可以理解为管理者。worker进程就是干活的小弟,将请求转给php-cgi去处理。

每次有一个新的请求过来,master进程将其放在一个队列中,让worker进程去抢夺这些请求。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!