Python 等忙cpu核

Python 等忙cpu核,python,windows,cpu,Python,Windows,Cpu,我最近在运行计算密集型python程序(无线程)时认识到,在Windows(Win8.1 x64)下,没有一个CPU核(我的4个逻辑核和2个物理核)被完全占用,而是每个逻辑核都忙碌了约25%。所有这些都对应于一个100%忙碌的核心。 Windows是否分散了任务,但不是很好?这和保持核心尽可能冷有关系吗?或者它与Python有关?我在linux下运行同一个程序,这里发生了我所期望的(一个内核100%忙)在Windows中观察到的实际上是交互式CPU调度程序(Windows或linux、其他Uni

我最近在运行计算密集型python程序(无线程)时认识到,在Windows(Win8.1 x64)下,没有一个CPU核(我的4个逻辑核和2个物理核)被完全占用,而是每个逻辑核都忙碌了约25%。所有这些都对应于一个100%忙碌的核心。
Windows是否分散了任务,但不是很好?这和保持核心尽可能冷有关系吗?或者它与Python有关?我在linux下运行同一个程序,这里发生了我所期望的(一个内核100%忙)

在Windows中观察到的实际上是交互式CPU调度程序(Windows或linux、其他Unix变体或macOS)的默认行为所期望的

当执行线程时,操作系统会不断发送定时中断(时钟中断),从而将对CPU核心的控制从用户空间(正在运行的应用程序)带回内核空间(运行进程的操作系统),从而使操作系统能够重新安排进程在同一个(或其他)系统上运行在其他进程分享“CPU馅饼”之后,CPU核心占据了一席之地。原则上,如果只有您的进程是主CPU使用者,也会发生这种情况(除了您的进程之外,通常还有其他进程在后台运行)

这种行为是交互式调度模式的一个非常重要的特性(这是当今大多数操作系统的默认设置,因为它们是交互式的……),因为它允许所有正在运行的进程都获得一部分CPU资源,而不会使任何进程感到饥饿。这允许运行的每个进程通过在它们之间共享整个CPU资源而“感觉”到交互,并且不让“CPU占用者”占用CPU而不归还它

现在,有了这些,你可以调整这种行为。例如,就像您通过将流程的关联性设置为单个核心或将“实时”优先级设置为流程所做的一样

它们中的任何一个都会导致进程继续在同一个核心上运行(亲和性很小,您要求操作系统只在一个核心上运行它)。 Realtime只是停止了中断过程。它会降低您的机器的交互性,但也会停止中断运行过程,因此它会继续在开始运行的同一内核上运行

现在,关于您在Linux上指定的行为。我认为这是以下两种解释之一:

  • 不知何故,您正在安排进程在SCHED_FIFO上运行,而没有意识到这一点(这是Windows的“实时”等价物)

    为了验证它,请使用进程的PID并执行

    chrt -p <your process PID>
    
    chrt-p
    
  • 您误解了一些向您展示的工具,好像流程运行在单个核心上,而实际上它分布在所有核心上


  • 如果您能详细说明您是如何得出结论的,即在Linux中它可以在所有内核上运行,我将非常高兴听到。

    您能尝试为您的进程设置处理器亲和力吗?如何在Windows7中实现它。在8.1中,您必须转到“详细信息”选项卡(现在无法给您截图,因为我只能访问德语本地化的Win 8.1)。如果将亲和性设置为仅1个CPU,则行为应该会改变。如果不是的话,就会有奇怪的事情发生。但总的来说,不管有什么原因,都不要管操作系统的调度程序,让它去做它的工作。是的,现在只有一个CPU 100%忙。另外,当我将任务优先级设置为realtime(“Echttzeit”,我也是德国人)时,只有一个核心就是(但这一次,在半秒钟内使用了另一个内核,然后又切换到另一个内核。我只是很困惑,这到底是如何工作的,为什么Windows会这样做。我想,Windows会一个接一个地强调内核,使每个内核的温度尽可能低,然后切换到下一个内核。但是这些变化很快就会发生。)为taskmanager解散。