我似乎无法找到这个特定的实现细节,甚至是指向操作系统手册中找到它的位置的指针。
基本上,主线程调用异步任务(稍后运行)自身。那么......什么时候运行?
它是否等待运行循环完成?或者它只是随机中断任何函数中间的运行循环?
我理解寄存器将是相同的(除非单独的线程),但实际上不是指令指针以及堆栈发生的情况,如果发生任何事情。
谢谢
答案 0 :(得分:1)
进程的线程都共享相同的地址空间,而不是相同的CPU寄存器。线程调度完成取决于编程语言和O / S.通常有明确的调度点,例如从系统调用返回,阻止等待I / O完成,或者在解释语言的p代码指令之间。某些O / S实现重新安排,具体取决于线程运行基于时间的调度的时间长度。通常,语言包括通过将控制权转移到操作系统的进程或线程调度程序组件来明确地将CPU提供给任何其他线程或进程的函数。
从一个线程或进程切换到另一个线程或进程的行为称为上下文切换,并且是经过仔细调整的代码,因为这通常每秒进行数千次。这可能会使代码难以理解。
我见过的最好的解释是http://www.amazon.com/The-Design-UNIX-Operating-System/dp/0132017997经典。
答案 1 :(得分:1)
在C#中,任务计划在当前SynchronizationContext
上运行。上下文基本上有一个任务队列,它安排在与之关联的线程上运行,在GUI应用程序中只有一个线程,因此任务被安排在那里运行。
GUI线程不会中断,但是当它完成队列中前面的所有其他任务时,它会执行任务。