0

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

processes = 4

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

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

那么这个配置在有/没有超线程的 CPU 上怎么样?

processes = 4
threads = 8
enabled-threads = true
4

2 回答 2

1

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

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

在丢弃线程之前,请考虑 GIL 在阻塞操作中释放,基本上每当您使用 uWSGI api 时(如果您使用它),因此线程几乎可以是好的并且(更重要的是)它们为您提供了一种廉价的方式用于增加并发性(与并行性不同),这比网络世界中的并行性更重要。

于 2014-01-13T09:26:11.930 回答
1

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

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

于 2014-01-13T10:27:15.703 回答