关于本篇文章的部分纠正,请参考这篇文章:http://www.cppblog.com/woaido...php
CGI是一个web server与cgi程序(这里能够理解为是php解释器)之间进行数据传输的协议,保证了传递的是标准数据。html
php-cgi是php解释器,就是上文提到的cgi程序。web
Fastcgi是用来提升cgi程序(php-cgi)性能的方案/协议。segmentfault
cgi程序的性能问题在哪呢?"PHP解析器会解析php.ini文件,初始化执行环境",就是这里了。标准的CGI对每一个请求都会执行这些步骤,因此处理的时间会比较长。服务器
Fastcgi会先启一个master进程,解析配置文件,初始化执行环境,而后再启动多个worker进程。当请求过来时,master会传递给一个worker,而后当即能够接受下一个请求。这样就避免了重复劳动,效率天然提升。并且当worker不够用时,master能够根据配置预先启动几个worker等着;固然空闲worker太多时,也会停掉一些,这样就提升了性能,也节约了资源。这就是Fastcgi的对进程的管理。多线程
上文提到了Fastcgi只是一个方案或者协议,那么php-fpm就是这个实现了Fastcgi的程序,也就是说,上文所描述的进程分配和管理是FPM来作的。官方对FPM的解释是 Fastcgi Process Manager(Fastcgi 进程管理器)。并发
PHP从代码级别来说不支持多线程操做,不能像Java、C#等语言同样能够编写多线程代码。但多线程和并发没有直接关系,多线程只是代码被运行时在同一时间同时执行多个线程任务,来提升服务器CPU的利用率,提升代码效率。但php是能够多进程执行的,上文所述的FPM进程管理机制就是多进程单线程的,有效提升了并发访问的响应效率。高并发
参考连接:php-fpm