CGI和FastCGI

概念

CGI全称是common gateway interface, 说明它是一个网关接口, 是一种协议, 没有具体实现. 和java的JDBC是一个意思.

FastCGI全称是fast common gateway interface, 它也是一个网关接口, 只是在CGI接口上做了一层封装.

但是CGI协议并没有考虑到性能问题, 实现了CGI协议的程序在执行完任务后就会销毁进程, 当有新的任务时, 又要重新启动进程.

FastCGI协议考虑到了性能问题, 实现了FastCGI协议的程序, 会先启动一个master进程作为管理员, 然后启动多个worker进程(相当于CGI)作为任务执行者. 并且这些worker进程的管理类似于线程池.

伪代码

interface CGI{
  createWorkderThenParsePhpFile();
}


interface FastCGI{
  createMasterToManageWorkers();
  createWorkderThenParsePhpFile();
}

通过上面的伪代码可以发现, FastCGI只是在CGI接口上面做了一层封装(编程就是套娃的过程), 写了一个管理方法createMasterToManageWorkers.

php-cgi和php-fpm

php-cgiphp-fpm是对CGIFastCGI的实现, 它们两个都是应用程序.

在最开始只有php-cgi, 并且实现了CGIFastCGI两种协议, 但是那个写代码的人水平不够高, 所以内部执行效率低下.

后来出现一个高手写了php-fpm应用程序, 用来实现两种协议, 这个应用程序效率很高, 被php官方盯上了, 把php-fpm收入自己腰包.(最开始php-fpm是外部插件, 现在已经内部集成).

总结

CGIFastCGI都是协议, 是一种规范. php-cgiphp-fpm都是实现了规范的程序, 其中php-fpm代码质量高, 执行效率好.

参考资料

PHP中CGI、CLI、FPM是什么 搞不清FastCgi与PHP-fpm之间是个什么样的关系 php-cli和php-fpm的关系是什么? php-cgi是php脚本的解析器吗?

THE END
开启精彩搜索

历史搜索

用户名或邮箱
密码
用户名
密码
重复密码
邮箱
注册
找回密码
注册 登录
邮箱
邮箱验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

新增

新增