【发布时间】:2018-11-17 14:03:08
【问题描述】:
当执行用户代码的线程正在等待输入时,调度程序如何知道中断它或线程如何知道调用调度程序,因为简单单线程应用程序的普通程序员不太可能插入 sched_yield( ) 无处不在。编译器是在优化时插入 sched_yield() 还是线程只是自旋锁定直到调度程序设置的通用计时器中断触发,或者用户是否必须显式声明 wait()、sleep() 函数才能切换上下文?
如果调度程序不是抢占式的,这个问题尤其重要,因为它必须在等待输入以使吞吐量生效时调用调度程序,但我不确定它是如何做到的这个。
【问题讨论】:
-
你有抢占式内核吗? (您是否使用具有内核的操作系统...?)
-
是的。如果它是抢占式的,那么我相信会存在定时器中断。
-
当程序等待输入时,它会调用操作系统函数来等待输入。在这种情况下,操作系统(以及调度程序)知道您的线程现在处于等待输入的状态。
-
这是一个令人讨厌的问题,因为几个月前我对操作系统还不太了解
标签: multithreading scheduler scheduling