我对 unistd.h 中声明的 sleep 函数有疑问
假设我们使用 CFS 调度程序。
我们有一个准备运行的进程(我们称之为“READY”状态),它被选择运行,现在正在运行(所谓的“RUNNING”状态)。
在 RUNNING 状态下执行期间,它会遇到一个 sleep 语句,例如 sleep(10),它会使其 sleep 10 秒,或者直到收到信号或以较早者为准。
现在,当执行 sleep(10) 时,进程是否处于 READY 状态,或者将其放回 RUNNING 队列中的原始优先级,还是将其放入 WAIT 队列。
我无法想象正确的事件顺序。一个想法表明它保留在 READY 队列中,而另一种想法是它被放入 WAIT 队列等待某种计时器到期。
请告诉我这是如何工作的,或者我的问题是否有问题。谢谢
最佳答案
我相信这取决于 sleep 的持续时间,即,如果等待很忙,那么它可以运行,如果等待很长,那么它将在等待队列中。此外,您应该能够通过将进程置于长时间 sleep 状态并检查其状态来确认这一点。
关于c - sleep 函数调用会导致哪种调度程序状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399093/