CPU如何处理睡眠功能?

use*_*976 5 cpu sleep system

当执行 sleep(10) 或等效语句时 CPU 会做什么。当CPU也进行上下文切换时,它如何准确地等待60秒,使该进程进入等待状态。

non*_*ame 3

sleep函数通常要求操作系统将CPU分配给另一个进程。实际上,有一个特殊的进程(通常称为“idle”),如果没有其他进程等待 cpu,它就会获取 cpu。在英特尔处理器上,空闲进程执行特殊指令(等待),这会停止处理器(然后,它不会执行更多指令)。无论处理器是否分配给空闲进程,它仍然响应硬件中断(其他计算机硬件产生的特殊信号,以防硬件想要通知处理器某些事件)。中断源之一是定时器 - 它每 10 毫秒左右向 CPU 发送一次中断(取决于具体的计算机和操作系统)。作为对计时器事件的响应,操作系统可能会将 CPU 分配回执行睡眠的进程 - 如果指定的时间已过。

由于操作系统能够以 1 个计时器滴答的精度测量时间,因此您的进程将在指定时间 +- 2 个滴答内准备就绪。如果您的 cpu 目前正忙,您的进程会被分配到 cpu,但会有一些额外的延迟。