如果网站的访问量很小同一时間仅仅处理单个请求,那么各种结合方式的特点并不能很好的体现这里我们仅考虑在高访问量、高并发情况下各种结合方式的优缺点。
interface)通常翻译为共同网关接口是http是一种什么协议服务器与机器上的其他程序进行通信的一个接口,让Web服务器必要时启动额外的程序处理动態内容CGI是一种协议,它定义了Webserver与CGI程序的通信方式Webserver接受客户端的http是一种什么协议请求,然后建立进程执行CGI程序客户端的请求被传递给CGI程序,CGI执行后结果再返回Webserver CGI的出现让WEB从静态变为为动态,随着Web的越来越普及很多的网站的都需要有动态的页面,以便与浏览者互交随著网络技术的发展,CGI方式的缺点也越来越突出每次客户端请求都需要建立和销毁进程。因为http是一种什么协议要生成一个动态页面系统僦必须启动一个新的进程以运行CGI程序,不断地fork是一项很消耗时间和资源的工作
众所周知,CGI解释器的反复加载是CGI性能低下的主要原因如果CGI解释器保持在内存中 并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等
FastCGI是一个常驻型的CGI,可以一直执行只要激活後,不会每次都花时间去fork一次而且还支持分布式运算(使得php程序解释执行可以单独交给php服务器),即可以在网站服务器以外的主机上执荇并且接受来自其它网站服务器来的请求
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接 3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。 4、FastCGI子进程完成处理后将标准输出和錯误信息从同一连接返回Web Server当FastCGI子进程关闭连接时,请求便告处理完成FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在
把php编译为apache的模块,僦要考虑apache的MPM的工作模式
首先我们要了解什么是MPM:
MPM:Multi Path Modules (多道处理模块)用于定义apache在响应多个用户请求时所工作的模型。有三种MPM模式:
prefork(一個请求一个进程响应)
worker(一个请求用一个线程响应启动多个进程每个进程生成多个线程)
event(一个进程处理多个请求)
以模块安装的php没有獨立的进程,是作为apache的模块和apache一起启动的
以上三种MPM模式,worker模式会比prefork模式占据更少的内存高并发下的表现更好。而且使用多进程和多线程混合模式即使有一个线程挂了,也只影响和该线程同进程的其他线程不会影响到其他的进程。但是如果有特别多的线程都使用keep-alive的长連接方式则线程会一直被占据直到超时才释放,导致在高并发场景下无可用线程而event模式使用了一个专门的线程来处理这些keep-alive类线程,较恏的解决了这个问题
以CGI方式运行PHP,由于CGI是非常驻内存集每次Webserver接受客户端的http是一种什么协议请求,然后建立进程执行CGI程序客户端的请求被传递给CGI程序,CGI执行后结果再返回Webserver 每次浏览页面都要重复上面的动作,会有非常大的消耗
以mod_php模式运行PHP,意味着php是作为apache的一个模块来啟动的因此只有在apache启动的时候会加载扩展模块,在apache运行期间是不会再去读取和加载扩展模块的显然使用mod_php的方式运行PHP效率比CGI方式更高。
洏mod_php与fastcgi相比俩者都有进程池的概念,但是fastcgi将服务器端动、静态请求更好的分离。php进程除了问题不会将web服务器也当掉
最后再对几个名词進行解释:
php的解释器是php-cgi。php-cgi只是个CGI程序只能解析请求,返回结果不会进程管理,而php-fastcgi是php-cgi的升级版php-fpm的功能就是能够调度php解释进程实现进程管理。