这可能是一个愚蠢的问题,但如何sleep()
, wait()
, pause()
,函数工作?
最佳答案
我们可以从更抽象的角度来看休眠操作:它是一种让您等待事件的操作。
当时间从 sleep
过去时触发有问题的事件调用超过 sleep 参数。
当一个进程处于事件状态时(即:它拥有一个 CPU),它可以以主动或被动的方式等待事件:
sleep( t ):
while not [event: elapsedTime > t ]:
NOP // no operatior - do nothing
这是一个微不足道的算法,可以以可移植的方式在任何地方实现,但存在的问题是,当您的进程正在积极等待时,它仍然拥有 CPU,浪费它(因为您的进程并不真正需要 CPU,而其他任务可能需要它)。
通常这应该只由那些不能被动等待的进程来完成(见下点)。
sleep( t ):
system.wakeMeUpWhen( [event: elapsedTime > t ] )
release CPU
为了实现被动等待,您需要一些外部支持:您必须能够释放您的 CPU 并在事件发生时要求其他人唤醒您。
这在单任务设备(如许多嵌入式设备)上是不可能的,除非硬件提供
wakeMeUpWhen
操作,因为没有人可以释放 CPU 或要求被唤醒。x86 处理器(和大多数其他处理器)提供 HLT使 CPU 休眠直到触发外部中断的操作。通过这种方式,操作系统内核也可以休眠以保持 CPU 冷却。
关于language-agnostic - sleep() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911739/