Django + Uwsgi + CPU Hyperthread这对并行性有什么优势?

时间:2014-01-13 07:51:36

标签: python uwsgi hyperthreading

假设我有一个在uwsgi emperor模式下运行的django项目,使用此配置

processes = 4

在启用了超线程的双核CPU上运行,这是否意味着我可以同时处理4个请求的[接近]真正的并行性?

与未启用超线程的双核CPU相比,它是否具有显着的性能优势?

在有/无超线程的CPU上配置怎么样?

processes = 4
threads = 8
enabled-threads = true

2 个答案:

答案 0 :(得分:1)

是的,多个进程可以(可能)同时在不同的处理器上运行。

对于python线程来说,这一点并非完全正确,因为python中的线程有一个锁(GIL)阻止它与另一个线程同时运行。

在丢弃线程之前,考虑到GIL是在阻塞操作中释放的,基本上每当你使用uWSGI api时(如果你使用它),所以线程几乎是好的,(更重要的是)它们会给你一种增加并发性的廉价方法(与并行性不同),它比网络世界中的并行性更重要。

答案 1 :(得分:1)

由于您已经使用了多进程uWSGI,enable-threads不会提高性能。它只能为你节省一些内存,所以如果你没有内存不足,你应该因为GIL而远离线程。

至于超线程,不要猜测它,测试它!性能增益(或损失)完全取决于应用程序,因此请尝试不同的设置,包括processes。你不太可能从HT获得2倍的增益,但它仍然可能很重要。