1

我很困惑为 Web 应用程序使用多个进程是否会提高性能。Apache 的 mod_wsgi 提供了一个选项来设置要为守护进程组启动的进程数。我之前将 fastcgi 与 lighttpd 一起使用,它还可以选择为每个 fastcgi 应用程序配置最大进程数。

虽然我不知道多处理如何更好,但与单进程多线程模型相比,我确实知道它有一些不好的地方。例如,在多处理场景(链接)中,日志记录将更难实现,尤其是当您还希望日志轮换时。而且由于内存不能共享,如果你在内存中缓存一些东西(最直接的方式),你就会有多个重复的副本。

多个进程是更好地利用多核计算能力,还是产生更高的吞吐量?还是它们只是用于一些单线程应用程序?

4

2 回答 2

4

对于 Python,或者更具体地说是 mod_wsgi 使用的 CPython,问题在于 Python GIL。尽管 Python 中可能有多个线程,但全局解释器锁实际上意味着一次只能有一个线程运行 Python 代码。这意味着它无法在系统上正确使用多个处理器/内核。但是,使用多个进程确实允许您使用所有这些处理器/内核。

也就是说,对于 mod_wsgi 来说,它并不都是 Python 代码,而是有很多 C 代码,而 Apache 也是 C 代码。在 C 代码执行期间,GIL 由该线程解锁,这意味着在 C 代码中运行的线程可以与在 Python 代码中运行的线程并行运行。仍然不是最好的,但仍然可以部分使用系统上的所有处理器/内核。

对我来说,与 mod_wsgi 有关的详细信息请阅读:

http://blog.dscpl.com.au/2007/09/parallel-python-discussion-and-modwsgi.html http://blog.dscpl.com.au/2007/07/web-hosting-landscape-and -modwsgi.html

于 2011-08-10T00:17:22.790 回答
3

多处理比多线程效率低,但它更能抵御故障。每个进程都有自己独立的内存空间,并且可以独立于其他进程终止和重新启动(回收)。

于 2011-08-09T15:06:34.773 回答