从我关于SO的另一个问题我发现它可能遵循简单的方法
void B()
{
if (_complete)
{
Console.WriteLine (_answer);
}
}
如果在if和console writeline之间发生上下文切换,可能会在不同的CPU上执行..这对我来说是新闻,所以我想知道现在什么时候单线程代码可以换成另一个CPU,为什么它可能在这么简单如上所述?
答案 0 :(得分:6)
何时可以为另一个CPU切换单线程代码
这可能随时发生。话虽如此,出于实际目的,你应该真的不关心。这是任何多任务操作系统的功能。
为什么在如上所述的简单情况下才有意义?
根本没有帮助您的代码。它确实允许操作系统更好地平衡和处理系统上运行的其他进程。
答案 1 :(得分:4)
基本上,上下文切换是操作系统“冻结”它所在的线程,因此另一个线程可以获得一些CPU时间。当第一个线程被“解冻”时,不要求它继续在之前运行的CPU上运行。该细节由操作系统决定。
例如,如果线程解冻时有一个未使用的完整核心,这个核心与运行该线程的先前核心不同,那么不使用免费核心将是浪费。
答案 2 :(得分:0)
何时可以为另一个CPU切换单线程代码
任何时候。
请记住,CPU / OS看不到您的代码。它看到的机器指令与你编写的代码非常不同 - 机器指令通常(总是?)以原子方式执行,但你的程序可以在任何指令之间进行预先设置/重新调度。
为什么在如上所述的简单情况下才有意义?
在商品操作系统上有preemtive个调度,您的程序不是唯一运行的代码。操作系统可能需要暂停代码才能运行其他进程/线程/服务/中断处理程序。
当你的进程再次运行时,它之前运行的CPU可能已被占用,而另一个CPU可以自由使用 - 因此操作系统会在该CPU上安排你的进程。