Operating system 有效的空闲线程实现是什么样子的?

Operating system 有效的空闲线程实现是什么样子的?,operating-system,Operating System,众所周知,繁忙的等待是不好的,因为它浪费了CPU时间。但是在现代操作系统中,如何使操作系统空闲线程正常工作呢? 这只是忙碌的等待吗?如果是的话,如何节约电力?最好的方法是什么 有没有可能让一个繁忙的等待像一个空闲的线程一样,而不是在一个紧密的循环中执行类似于thread_yield()的操作?这是一个非常广泛的问题,所以没有办法给你一个非常具体的答案;我会给你一些一般的指导方针 通常,在现代程序中,您可能会使用某种类型的线程池库为您管理线程。这些线程通常有某种类型的空闲超时,在此之后线程将被关闭

众所周知,繁忙的等待是不好的,因为它浪费了CPU时间。但是在现代操作系统中,如何使操作系统空闲线程正常工作呢? 这只是忙碌的等待吗?如果是的话,如何节约电力?最好的方法是什么


有没有可能让一个繁忙的等待像一个空闲的线程一样,而不是在一个紧密的循环中执行类似于thread_yield()的操作?

这是一个非常广泛的问题,所以没有办法给你一个非常具体的答案;我会给你一些一般的指导方针

通常,在现代程序中,您可能会使用某种类型的线程池库为您管理线程。这些线程通常有某种类型的空闲超时,在此之后线程将被关闭;如果他们需要添加一些线程,他们将启动新线程

如果您正在管理自己的线程生命周期,那么可以采取多种方法。也许在你的情况下,等待事件或信号之类的事情可能会起作用。在这种情况下,分配工作的线程可能会引发一个事件来唤醒线程。如果这看起来太复杂,那么像睡一段时间这样简单的事情会比在循环中检查要好

根据您的情况,其他一些方法可能有意义。但一般来说,您肯定希望尝试利用已经编写的库来处理这种情况,而不是尝试从头开始编写库



啊,谢谢你的澄清评论。这里似乎有一些关于这个话题的有趣信息。如果信息准确,听起来像是O/s特定的;一些windows版本只是在循环中调用halt指令,而稍后的版本调用硬件特定指令以降低时钟速度或其他节能措施。

谢谢你的回答,但我指的是操作系统级空闲线程,即在没有其他线程运行时运行的线程。在用户程序级,有很多方法,在你的帖子中,有些我不知道,所以谢谢你。这就是我最初使用“空闲线程”而不是你编辑的“空闲线程”的原因,所以我将回滚此更正。如果我的问题让人困惑,我很抱歉。很酷,所以这是一个繁忙的优化循环。应该做更多的研究,因为它在维基百科上。看来Linux也有类似的功能。@GuilhermeCaminha没有。环绕halt指令的循环不是“忙”。在执行halt的内核上停止执行,等待中断。当中断发生时,内核恢复中断的执行,如果稍后(无需再次执行),空闲线程将再次运行,它将在暂停后恢复,循环并再次点击暂停。