假设一台机器上有两个处理器。线程 A 在 P1 上运行,线程 B 在 P2 上运行。
线程 A 调用Sleep(10000);
是否有可能当线程 A 再次开始执行时,它在 P2 上运行?
如果是,谁来决定这种转变?如果没有,为什么不呢?
处理器是否存储了它正在运行的所有线程的一些数据,或者操作系统将每个线程绑定到处理器的整个生命周期?
假设一台机器上有两个处理器。线程 A 在 P1 上运行,线程 B 在 P2 上运行。
线程 A 调用Sleep(10000);
是否有可能当线程 A 再次开始执行时,它在 P2 上运行?
如果是,谁来决定这种转变?如果没有,为什么不呢?
处理器是否存储了它正在运行的所有线程的一些数据,或者操作系统将每个线程绑定到处理器的整个生命周期?
有可能的。这将由操作系统进程调度程序确定,也可能取决于正在运行的应用程序。除了缓存中的任何内容之外,处理器不会保留有关先前运行的线程的信息。
是的,有可能。尽管最终线程从进程(可执行文件)继承其 CPU(或 CPU 内核)。在操作系统中,进程在其当前的 quanta(时间片)上运行的 CPU 或 CPU 内核由调度程序决定:
http://en.wikipedia.org/wiki/Scheduling_ (计算)
-Oisin
操作系统决定在哪个处理器上运行线程,并且它可能会在该线程的生命周期内轻松更改,尤其是在存在上下文切换(由睡眠引起)的情况下。如果系统已加载,则完全有可能两个线程将在同一处理器(或内核)上运行,只是在不同的时间。或者,如果系统上没有任何负载,两个线程可能会继续在不同的处理器上运行。