假设一台机器上有两个处理器。线程A在P1上运行,线程B在P2上运行。线程和CPU亲和力
线程A调用Sleep(10000);
是否有可能的是,当线程A再次开始执行,它运行在P2?
如果是,谁来决定这个过渡?如果不是,为什么不呢?
Processor是否存储了一些数据,它所运行的所有线程或OS将每个线程绑定到处理器的整个生命周期?
假设一台机器上有两个处理器。线程A在P1上运行,线程B在P2上运行。线程和CPU亲和力
线程A调用Sleep(10000);
是否有可能的是,当线程A再次开始执行,它运行在P2?
如果是,谁来决定这个过渡?如果不是,为什么不呢?
Processor是否存储了一些数据,它所运行的所有线程或OS将每个线程绑定到处理器的整个生命周期?
这是可能的。这将由操作系统进程调度程序确定,也可能取决于正在运行的应用程序。除了缓存中的内容以外,处理器不保存关于以前运行的线程的信息。
这取决于很多事情,它取决于特定的操作系统具有不同的行为。另见:Processor Affinity和Scheduling Algorithms。在Windows下,您可以通过任务管理器将特定进程固定到处理器内核。
是的,这是可能的。尽管最终一个线程从进程(可执行文件)继承了其CPU(或CPU核心)。在操作系统中,进程为其当前量程(时间片)运行的CPU或CPU内核由调度程序决定:
http://en.wikipedia.org/wiki/Scheduling_(computing)
-Oisin
操作系统决定要运行的处理器上的螺纹,并且它可以该线程的寿命期间很容易地改变,尤其是如果有一个上下文切换(所造成的睡眠)。如果系统加载完全可能,两个线程将在不同的时间在同一个处理器(或核心)上运行。或者如果系统上没有任何负载,那么这两个线程可能会继续在单独的处理器上运行。