本我: 小菜,你是有合适的offer了吗?
小菜: 没有,就是想出去看看。
本我: 现在正值疫情,外面市场环境不是很乐观,两极分化,我先考你个问题。
小菜: 请赐教
本我:PHP的SAPI你都了解过那些?
小菜:php的SAPI就是指的php的运行模式,常见的运行模式有cli、cgi、fast-cgi
本我:你说的详细一点
小菜:
cli
cli命令行接口, 在命令行下执行PHP脚本, 内置web服务器,如果请求未指定执行哪个PHP脚本,则默认执行目录下的index.php 或index.html,如果这两个文件都不存在则返回404
cgi
cgi全称通用网关接口(Commom Gateway Interface),它把网页和WEB服务器中的执行程序连接起来,把从HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。常见和apache配合使用。
fast-cgi
fast-cgi是cgi的升级版本,PHP使用PHP-FPM(FastCGI Process Manager)进行cgi管理。
本我:他们都有什么区别啊
小菜:
cgi
cgi方式在遇到连接请求先要创建cgi的子进程,激活一个cgi进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
fast-cgi
fast-cgi可以看作是一个cgi进程管理器,只要激活后,它可以一直执行着,不会每次都要花费时间去fork一次从而比cgi的方式有更大的吞吐能力。
cli
cli在命令行模式下可以直接通过内置web服务器启动的,不过一般都不会去这么用的,都是去跑指定php文件的,一般都是用于定时任务和实时消费消息队列的,不过就像近年来的swoole、workerman也是用cli模式运行的,得益于只用加载一次框架,持久化运行在内存中,所以比前两种方式都快不少.
本我:PHP-FPM运行时都会有那些进程啊?
小菜:master 和 work 进程
本我:他们是如何工作的呢?
小菜:PHP-FPM
监听端口9000
,nginx
匹配到php文件后会通过fast-cgi协议
转发给PHP-FPM
的master
进程上,master
进程会分配给work
进程处理(每一个work进程都有一个php解释器),此时work
进程会加载框架,匹配路由,最终返回结果给nginx
。
本我:那PHP-FPM都要配置那些参数优化呢?
小菜:emmmm,这个我倒是没有看过
本我: 还算可以,不过PHP-FPM参数优化你可以下去看看,离职到事情再考虑考虑
(ps:请了解 LNMP优化
)
学到知识点的帅渣一定会 : > 点赞 · 收藏 · 评论