2

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

线程 A 调用Sleep(10000);

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

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

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

4

4 回答 4

1

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

于 2011-01-31T03:49:00.610 回答
0

这取决于很多事情,它的行为取决于特定的操作系统。另请参阅:处理器亲和性调度算法。在 Windows 下,您可以通过任务管理器将特定进程固定到处理器内核。

于 2011-01-31T03:49:31.250 回答
0

是的,有可能。尽管最终线程从进程(可执行文件)继承其 CPU(或 CPU 内核)。在操作系统中,进程在其当前的 quanta(时间片)上运行的 CPU 或 CPU 内核由调度程序决定:

http://en.wikipedia.org/wiki/Scheduling_ (计算)

-Oisin

于 2011-01-31T03:50:03.780 回答
0

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

于 2011-01-31T03:50:28.160 回答