- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对于是否对Web应用程序使用多个进程会提高性能感到困惑。 Apache的mod_wsgi提供了一个option来设置守护进程组要启动的进程数。我以前在fasttgi和fasttgi中使用过fastcgi,它也可以选择为每个fastcgi应用程序配置最大进程数。
虽然我不知道多处理如何更好,但与单进程多线程模型相比,我确实对此有所了解。例如,在多处理方案(link)中将更难以实现日志记录,尤其是当您还希望日志轮换时。而且由于无法共享内存,因此如果您在内存中缓存某些内容(最直接的方法),则会有多个重复副本。
多个进程是否更好地利用了多核计算能力,还是产生了更高的吞吐量?还是仅在某些单线程应用程序中存在?
最佳答案
如果是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
关于multithreading - 当我们已经有了多线程时,多处理有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6998320/
我是一名优秀的程序员,十分优秀!