apache如何为页面运行PHP

Mey*_*Hit 11 php apache

想象一下,有一个PHP页面http://server/page.php.

客户端同时从浏览器向该服务器发送100个请求.

服务器是否php.exe同时运行100个单独的进程?

是否重新解释了page.php100次?

Spu*_*ley 11

根据服务器配置,答案是高度可变的.

我们先回答问题1:

服务器是否同时运行100个独立的php.exe进程?

这取决于PHP的安装方式.如果PHP是通过CGI运行的,那么答案是"是的,每个请求调用一个单独的PHP实例".如果它是通过Apache模块运行的,那么答案是"不,每个请求在Apache可执行文件中启动一个新的PHP线程".

其他Web服务器也存在类似的变化.请注意,对于基于Unix/Linux的操作系统,为每个请求运行可执行文件的单独副本对于性能来说不一定是坏事; 操作系统的核心设计使得在许多情况下,任务可以通过许多单独的可执行文件而不是单个可执行文件来完成.

但是,无论您如何处理,大量同时发出的请求都会耗尽您的服务器资源,并导致用户出现超时和错误.这就是为什么PHP程序尽可能快地完成运行的重要性.不要为运行缓慢的Web消费编写PHP程序; 如果您可能拥有大量流量,则需要像对功能一样测试性能.让您的程序快速退出将大大降低同时发出大量请求的可能性,这显然会对您网站的性能产生重大影响.

现在你的第二个问题:

是否重新解释了page.php 100次?

对于标准的PHP安装,这里的答案是"是的,它确实会对性能产生影响."

但是,PHP提供了几种专门用于缓解此问题的缓存解决方案.主要选项是APC和Zend Cache,其中任何一个都可以作为标准模块安装.使用这些模块意味着PHP会缓存解释的代码,因此对于后续调用,它可以更快地运行.

从即将发布的PHP 5.5版开始,Zend Cache将作为标准PHP安装的一部分包含在内.

  • @halfer - 不,和Zend一起去了.他们将它重命名为`OpCache`(即没有Zend名称),但它是Zend缓存.Zend去年开放了它,专门为了让它进入5.5. (2认同)

小智 5

Apache2具有多种不同的工作模式。

在“ prefork”(最常用)模式下,Apache将为每个请求创建进程,每个进程将运行自己的php.exe。配置文件将分配最大连接数(MaxClients在httpd.conf中),Apache仅创建MaxClients。这是为了防止内存耗尽。更多请求排队,等待上一个请求完成。

如果未安装APC,XCache,eAccelerator等操作码缓存扩展,则php.exe将重新解释page.php 100次。

  • 你的英语很棒! (3认同)