Linux和i18n上的Apache:产生进程还是线程?

时间:2010-04-09 10:10:18

标签: php localization apache2

我想更清楚地了解当Linux上的Apache在进程前叉模型中收到HTTP请求时发生了什么。

假设我们有20个Apache子进程在等待。

当我收到HTTP请求时,是否可以选择1个子进程来处理请求,并且该进程在第一个请求完成之前不会处理来自另一个用户的另一个请求?

我问的问题是因为PHP限制声明:

The locale information is maintained per process, not per thread.
If you are running PHP on a multithreaded server API like IIS or Apache
on Windows, you may experience sudden changes in locale settings while a script
is running, though the script itself never called setlocale(). This happens due
to other scripts running in different threads of the same process at the same
time, changing the process-wide locale using setlocale().

1 个答案:

答案 0 :(得分:0)

一般来说,如果你使用mpm-prefork,每个PHP实例都有自己的进程 更改语言环境是安全的,如果你使用mpm-worker或mpm-event那么你就不安全了。

此外,如果您在任何服务器后面运行PHP作为fastcgi进程,它也会分叉,并且每个连接都有进程。所以它也应该是安全的。

注意:

  • 在运行PHP时,通常没有理由不在Linux下使用mpm-prefork。
  • 在Windows下没有“fork”这样的东西,所以apache在Windows下是多线程的