2

如何知道我的 Python 进程绑定到了哪个进程?仅这些相同的行,子进程是否会在父进程当前正在执行的同一个核心(即 CPU)上执行?

4

1 回答 1

10

如果有人特别要求发生这种情况,进程和本机操作系统线程只会绑定到特定的处理器。默认情况下,进程和线程可以(并且将)安排在任何可用的处理器上。

现代操作系统使用抢占式多线程,可以随时中断线程的执行。当该线程下一次计划运行时,它可以在不同的处理器上执行。这称为上下文切换。线程的整个执行上下文被操作系统存储起来,然后当线程被重新调度时,执行上下文被恢复。

由于这一切,询问您的线程正在哪个处理器上执行是没有意义的,因为答案随时可能改变。即使在执行查询当前线程的处理器的函数期间。

同样,默认情况下,两个独立进程在其上执行的处理器之间没有关系。这两个进程可以在同一处理器或不同处理器上执行。这完全取决于操作系统如何决定调度不同的线程。

在您声明的评论中:

由于 GIL 锁,Python 进程将仅在一个内核上执行。

这种说法是完全不正确的。例如,一段 Python 代码将声明 GIL,获取所有可用处理器的上下文切换,然后释放 GIL。

在我所说的答案的开头,我提到了将进程或线程绑定到特定处理器的可能性。例如,在 Windows 上,您可以使用SetProcessAffinityMaskandSetThreadAffinityMask来执行此操作。但是,这样做是不寻常的。我只记得曾经这样做过一次,那是为了确保执行CPUID在特定处理器上运行。在事物的正常运行中,进程和线程与所有处理器都有关联。

在另一条评论中,您说:

我正在创建子进程以使用 CPU 的多核。

在这种情况下,您无需担心。通常,您将创建与逻辑处理器一样多的进程。操作系统调度程序是明智的,它将调度每个不同的进程在不同的处理器上运行。从而优化利用可用的硬件资源。

于 2012-12-22T15:59:59.907 回答