2

我看到大多数答案认为 mod_php 效率较低,因为由于提供静态文件,内存占用会更高,就像这个一样。

但我有不同的看法,如下:

事实上,代码段在fork()ed 进程之间是共享的,所以内存占用谓词不应该成立。

我能想到的唯一原因mod_php是非线程安全的,因此 Web 服务器只能为每个请求创建子进程。

而在 fastcgi 模式下,Web 服务器可以通过多路复用技巧来提高性能,从而减少fork()开销。

总之,mod_php 的缺点不是它的内存占用,而是它的开销fork(),但如果mod_php可以是 thread_safe,fork()就没有必要了,这将是服务请求的最有效解决方案。

以上是我的看法,但不是100%肯定。

那正确吗?

4

1 回答 1

2

分叉非常快,默认的 apache + mod_php 安装也分叉。(除非使用工人 mpm)。

真正的原因是(有点)如下:

标准的mod_php会有相当大的进程,因为这个进程包含了php和所有其他的apache模块PHP 完成了。

另一个原因(正如您所提到的)是非 PHP 请求没有触及 PHP。

使用 FastCGI 时可以切换到 worker mpm 的事实只是额外的好处;但确实增加了效率。

一般来说,对于这些类型的设计,您总是希望尽可能使 apache 和 php 进程的生命周期尽可能短,并将它们分开会有所帮助。

但是是的.. fork非常快,在某些设计中,它们实际上可以比 Linux 上的 Threads 运行得更好(没有来源,我只记得读过这个)。对于 webserver 类型的系统,我确实相信基于 Reactor 模式的系统工作得更好。NGinx 和 Varnish 就是最好的例子。

于 2011-06-13T13:07:20.783 回答