假设只有一个线程,在循环算法中,是什么让任务从刚刚运行到完成?
有没有某种监督机制来阻止这种情况的发生?
在协作调度系统中,什么都没有。任务通常必须调用一些操作系统函数(显式yield
或其他可能隐式生成的函数,如消息获取函数(。
在抢占式调度系统中,它们(显然(被操作系统抢占,状态被保存,下一个任务被恢复并运行。
例如,Linux给每个线程一个100ms(来自内存(的量程。线程可以提前放弃它的量程(如果这样做的话,它通常会得到很好的处理(,但如果它使用了整个量程,它就会被操作系统强制暂停。