CGI(Common Gateway Interface)公共网关接口
遇到连接请求时,创建cgi的子进程,处理完后结束这个子进程,这就是fork-and-excute,有多少请求就会有多少cgi子进程,而且程序必须运行在网络服务器上
FastCGI
- Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求
- 常驻型CGI,支持分布式运算
- FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能
- 多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存
工作原理
- web服务器启动时加载FastCGI进程管理器
- 自身初始化,启动多个解释器进程等待来自webserver的请求
- Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi,Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
- FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server,并等待下一个连接
php-cgi
- PHP-CGI是PHP自带的FastCGI管理器
- php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效
php-fpm
- 实现了Fastcgi的程序
- php-fpm就是支持解析php的一个fastCGI进程管理器/引擎
- 更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载