假设我有一个在uwsgi emperor模式下运行的django项目,使用此配置
processes = 4
在启用了超线程的双核CPU上运行,这是否意味着我可以同时处理4个请求的[接近]真正的并行性?
与未启用超线程的双核CPU相比,它是否具有显着的性能优势?
在有/无超线程的CPU上配置怎么样?
processes = 4
threads = 8
enabled-threads = true
答案 0 :(得分:1)
是的,多个进程可以(可能)同时在不同的处理器上运行。
对于python线程来说,这一点并非完全正确,因为python中的线程有一个锁(GIL)阻止它与另一个线程同时运行。
在丢弃线程之前,考虑到GIL是在阻塞操作中释放的,基本上每当你使用uWSGI api时(如果你使用它),所以线程几乎是好的,(更重要的是)它们会给你一种增加并发性的廉价方法(与并行性不同),它比网络世界中的并行性更重要。
答案 1 :(得分:1)
由于您已经使用了多进程uWSGI,enable-threads
不会提高性能。它只能为你节省一些内存,所以如果你没有内存不足,你应该因为GIL而远离线程。
至于超线程,不要猜测它,测试它!性能增益(或损失)完全取决于应用程序,因此请尝试不同的设置,包括processes
。你不太可能从HT获得2倍的增益,但它仍然可能很重要。