繁体   English   中英

使用多处理池时,工作进程数应与CPU或内核数相同吗?

[英]When using multiprocessing Pool should the number of worker processes be the same as the number of CPU's or cores?

使用Python多处理池时,辅助进程的数量应该与CPU或内核的数量相同吗?

本文http://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/说,每个内核实际上是CPU芯片上的中央处理单元。 因此,似乎有1个进程/核心应该没有问题

例如,如果我有一个带有4个内核的CPU芯片,则可以运行1个进程/每个内核总共4个进程而不会降低性能。

从我所学到的有关python和多处理的知识来看,最好的做法是...

  • 每个内核一个进程,但是跳过逻辑进程。

超线程对python没有帮助。 在许多情况下,它实际上会损害性能,但是请您首先对其进行测试。

  • 使用亲和力(pip install亲和力)模块将每个进程绑定到特定核心。

至少在使用32位python的Windows上进行了广泛的测试,由于不断地破坏缓存,不这样做会严重损害性能。 再说一次:跳过逻辑核心! 假设您有一个具有超线程功能的Intel CPU,则逻辑值为1,3,5,7,依此类推。

线程数多于实际内核将无济于事,除非同时发生IO,如果您正在处理数字,也不应这样做。 自己测试我的主张,尤其是在使用Linux的情况下,因为我根本没有在Linux上进行测试。

这实际上取决于您的工作量。 视情况而定,最好的方法是运行一些基准测试并查看结果。

计划进程是一项昂贵的操作,进程越多,您需要更改上下文的时间就越多。

如果大多数进程未运行(例如,它们正在等待IO),则过量使用可能会被证明是有益的。 相反,如果您的进程大部分时间都在运行,则添加更多争用CPU的进程将是有害的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM