1.php最常见的五种运行模式。
CGI 通用网关接口
FastCGI 常驻内存的CGI
CLI 命令行
Web模块 Apache等Web服务器 模块的形式加载php进程
ISAPI 已经不用了
2.CGI Common Gataway Inteface 通用网关接口
网页请求和执行程序的连接桥梁,网页指令传递给执行程序php,再把执行结果返回网页
每一个请求都会经历。创建CGI子进程-》处理请求-〉返回结果-》关闭进程的模式 Fork-and-Excute模式
这样大量的请求会创建大量的子进程,占用大量的系统内存 cpu时间等,子进程反复加载是性能的瓶颈。
php在cgi模式下 每一个请求都要载入ini文件,扩展,初始化数据结构等
3.fastCGI CGI的升级版本,常驻内存的CGI模型,只激活一次,然后一直执行,不必每次Fork一次,fastCGI是可伸缩的http-server和脚本程序的通信接口,apache nginx等都支持fastCGI
web-server启动时载入fastCGI进程管理,php-FPM-》进程管理器初始化 启动多个CGI等待连接-〉进程管理器接到请求选择一个CGI连接并处理请求-》处理完成后继续等待下一个连接
fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分 配新的进程来运行逻辑
Fastcgi支持分布式运算. fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮.
fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态
4.CLI模式
php的命令行模式, 使用多进程,守护进程负责任务分发,子进程负责处理数据,子进程退出守护进程还有机会重建流程
5.模块模式
apache可以以模块的形式动态加载php,作为web-server的一个模块,可以通过发送信号HUP或者AP_SIG_GRACEFUL给服务器,一旦接受到该信号,Apache将重新装载模块,而不需要重新启动服务器
6.ISAPI模式 微软提供的一套API接口。一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(由于微软的排他性,只能运行于windows环境)