CGI、PHP-CGI、FastCGI、PHP-FPM的区别

CGI(Common Gateway Interface)称为通用网关接口,是Web Server和Web Application之间数据交换的一种协议,注意它是一种协议,跟语言没有关系。

CGI 针对每个 HTTP 请求都会 fork 一个新进程来进行处理,然后把这个进程处理完的结果通过 Web 服务器转发给用户,刚刚 fork 的新进程也随之退出,如果下次用户再请求动态资源,那么 Web 服务器又再次 fork 一个新进程,如此周而复始循环往复。

FastCGI,也是Web Server和Web Application进行数据交换的一种协议。注意,它仍然是一种协议。不同于CGI每个请求都创建一个新的进程,FastCGI 则会先 fork 一个 master 进程,然后再 fork 多个 worker 进程(与 Nginx 有点像),当 HTTP 请求过来时,master 进程会将其传递给一个 worker 进程,然后立即可以接受下一个请求,这样就避免了重复的初始化操作,效率自然也就提高了。而且当 worker 进程不够用时,master 进程还可以根据配置预先启动几个 worker 进程等着;当空闲 worker 进程太多时,也会关掉一些,这样不仅提高了性能,还节约了系统资源。

PHP-CGI是CGI协议在PHP上的实现,PHP-FPM(FastCGI Process Manager)称为FastCGI 进程管理器,是FastCGI协议在PHP上的实现。

PHP-FPM 负责管理一个进程池来处理来自 Web 服务器的 HTTP 动态请求,在 PHP-FPM 中,master 进程负责与 Web 服务器进行通信,接收 HTTP 请求,再将请求转发给 worker 进程进行处理,worker 进程主要负责动态执行 PHP 代码,处理完成后,将处理结果返回给 Web 服务器,再由 Web 服务器将结果发送给客户端。这就是 PHP-FPM 的基本工作原理。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/phpe/3715.html

(0)
上一篇 2021年5月5日 08:00
下一篇 2021年5月8日 22:21

相关推荐

  • PHP语言的::class用法详解

    关键词 class 可用于类名的解析。 使用 ClassName::class 可以获取包含类 ClassName 的完全限定名称。这对使用了 命名空间 的类尤其有用。 以上例程会输出: PHP8开始关键词 class也可用于对象…

    PHP经验 2021年7月22日
    02540
  • PHP中echo语言结构的详解

    echo 的作用:输出一个或多个字符串且没有返回值。 echo 不是一个函数,它是一个语言结构。 不一定要使用小括号来指明参数,单引号,双引号都可以。另外,如果你想给echo 传递多个参数, 那么就不能使用小括号。

    PHP经验 2021年10月29日
    02410
  • Laravel环境配置文件.env的加载过程

    在全新的 Laravel 安装中,应用程序的根目录将包含一个.env.example文件,该文件定义了许多常见的环境变量。在 Laravel 安装过程中,这个文件会自动复制并重命名为.env文件。 然后config使用 Laravel 的env函数从目录中的各种 Laravel 配置文件中检索这些值。 如果.env文件…

    PHP经验 2021年7月23日
    05950

发表评论

登录后才能评论