线程和CPU亲和力

时间:2011-01-31 03:42:24

标签: multithreading processor affinity

假设一台机器上有两个处理器。线程A在P1上运行,线程B在P2上运行。

线程A调用Sleep(10000);

当线程A再次开始执行时,它是否可能在P2上运行?

如果是,谁来决定这种转变?如果不是,为什么不呢?

处理器是否存储了一些数据,这些数据正在运行的所有线程或操作系统将每个线程绑定到处理器的整个生命周期?

4 个答案:

答案 0 :(得分:1)

有可能。这将由操作系统进程调度程序确定,也可能依赖于正在运行的应用程序。除了缓存中的任何内容之外,处理器不保留有关以前运行的线程的信息。

答案 1 :(得分:0)

这取决于许多事情,它的行为取决于特定的操作系统。另请参阅:Processor AffinityScheduling Algorithms。在Windows下,您可以通过任务管理器将特定进程固定到处理器核心。

答案 2 :(得分:0)

是的,有可能。虽然最终一个线程从进程继承其CPU(或CPU核心)(可执行文件)。在操作系统中,一个进程运行的CPU或CPU核心的当前量子(时间片)由调度程序决定:

http://en.wikipedia.org/wiki/Scheduling_(computing

-Oisin

答案 3 :(得分:0)

操作系统决定运行线程的处理器,并且在该线程的生命周期内可能很容易更改,尤其是在存在上下文切换(由睡眠引起)的情况下。如果加载系统,两个线程将在同一处理器(或核心)上运行,只是在不同的时间完全可能。或者,如果系统上没有任何负载,则两个线程可以继续在不同的处理器上运行。