0x500 程序进程或线程睡眠
知识来源-我的问题:就是类似于Python中得time.sleep()和Java中得Thread.sleep()这些操作,操作系统是怎么处理的?
调用Python的time.sleep()或者Thread.sleep()函数本质上是想让操作系统CPU暂停执行当前进程/线程一段指定的时间。这些函数背后的机制设计到操作系统的调度器和时间管理器。
调度器
操作系统中使用一个【调度器】来管理所有的进程和线程,包括就绪,等待,运行中,阻塞,暂停或挂起等状态的进程/线程。调度器根据一定的策略(公平,优先级)来决定那个进程或线程接下来应该运行。
计时器和中断
操作系统使用计时器硬件来跟踪时间和生成中断。当你调用sleep()方法时,操作系统根据这些计时器来决定什么时候唤醒进程。
流程
- 设置休眠:当程序调用这类睡眠函数时,操作系统将进程或线程的状态设置为休眠,并记录下什么时间点唤醒该进程。
- 计时器中断:到了该唤醒时触发中断,操作系统的中断处理程序响应这个中断。
- 唤醒进程:操作系统将这个进程标记为可运行状态,等待调度器在接下来的调度周期中根据策略调度运行。
效率和准确性
由于进程在唤醒后还要等待调度器调度运行,所以实际的运行时刻可能不会非常的精准,尤其时在有非常多的进行需要调度器进行调度时。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果