【问题标题】:What exactly happens when sleeping a thread休眠线程时究竟会发生什么
【发布时间】:2011-01-18 20:42:57
【问题描述】:

我想知道操作系统中的任务调度程序如何处理休眠线程。

我的意思是,调度程序是否仍在检查睡眠线程,或者在确定接下来的 10 毫秒或多长时间内哪个线程处于活动状态时完全跳过。

我问这个的原因是要弄清楚一个睡眠线程是否消耗 CPU 周期(尽管很少)。

那么有人知道会发生什么吗?

你知道从 Windows 到 Linux 有什么不同吗?

【问题讨论】:

标签: windows linux operating-system


【解决方案1】:

当 CPU 为该线程执行指令时,该线程运行。调度程序将 CPU 交给可运行线程。休眠线程只是调度程序内部表的一个入口;该线程本身不消耗 CPU,因为调度程序知道该线程不可运行,因此不给他 CPU。该条目在概念上包含线程应被唤醒的时间。

睡眠线程可能有间接成本,即调度程序本身的管理时间。这实际上取决于调度程序使用的结构和算法;据说 Linux 内核调度程序非常擅长管理数千个休眠线程,而无需花费太多时间来决定运行哪个线程。其他一些操作系统表现不佳,但根据经验,当线程/进程的总数少于一千时,这种影响可以忽略不计。

【讨论】:

    【解决方案2】:

    这取决于操作系统的实现,但通常有一个“可调度线程”数据结构来保持效率。

    但有些管家任务可能不得不偶尔查看所有现有线程的列表,即使不是在每个调度周期。

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 1970-01-01
      • 2015-10-23
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2023-04-01
      • 2019-10-12
      相关资源
      最近更新 更多