在选择多处理的进程数时,有没有什么准则可以遵循?

2024-05-21 23:18:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始用多处理(这真是太棒了!),但我想知道是否有选择进程数量的指导原则?它仅仅基于服务器上的核心数量吗?它是否以某种方式取决于你运行的应用程序(循环次数、cpu使用量等)?等等…我如何决定生成多少个进程?现在,我只是猜测和添加/删除流程,但如果有某种指导原则或最佳实践,那就太好了。在

另一个问题,我知道如果我添加太少(程序运行缓慢)会发生什么,但是如果我添加“太多”呢?在

谢谢!在


Tags: 服务器程序运行应用程序核心数量进程方式流程
2条回答

这完全取决于应用程序的功能。如果它是CPU密集型的,那么核心的数量是一个合理的起点。如果是IO密集型,那么多个进程无论如何也无助于提高性能。如果它主要是CPU偶尔IO(例如PNG优化),你可以运行比内核数量更多的进程。在

唯一确定答案的方法是运行应用程序并检查资源利用率。如果有空闲的CPU时间,请添加更多的工作进程。在

如果您的所有线程/进程确实都是CPU绑定的,那么应该运行CPU报告的内核数量一样多的进程。由于HyperThreading,每个物理CPU核可以呈现多个虚拟核。调用^{}获取虚拟核心的数量。在

如果只有1个线程的p是CPU限制的,那么可以通过乘以p来调整这个数字。例如,如果您的进程有一半是CPU限制的(p=0.5),并且您有两个CPU,每个CPU有4个内核,并且有2个超线程,那么应该启动0.5*2*4*2=8个进程。在

如果进程太少,则应用程序的运行速度将低于预期。如果您的应用程序可以完美地扩展,并且只有CPU限制(即在10倍的内核上执行时,速度要快10倍),这意味着您的速度相对较慢。例如,如果您的系统调用了8个进程,但是您只启动了4个进程,那么您将只使用一半的处理能力,所用的时间是原来的两倍。请注意,在实践中,没有应用程序可以完美地伸缩,但是有些应用程序(光线跟踪、视频编码)非常接近。在

如果进程太多,同步开销将增加。如果您的程序几乎没有同步开销,这不会影响整个运行时,但可能会使其他程序看起来比它们慢,除非您将进程设置为较低的优先级。如果你的操作系统有一个好的调度程序,过多的进程(比如10000个)在理论上是可以的。实际上,任何同步都会使开销难以承受。在

如果您不确定您的应用程序是否受CPU限制和/或完全可伸缩,只需观察不同线程计数的系统负载。您希望系统负载略低于100%,或者更精确的uptime是虚拟核心的数量。在

相关问题 更多 >