众所周知,繁忙的等待很糟糕,因为它浪费了CPU时间。但是在现代操作系统中如何使OS空闲线程运行良好呢? 这只是一个忙碌的等待吗?如果是这样,那么节约电力又做了什么?什么是最好的方法?
是否有可能做一个像空闲线程一样的忙等待,而不是在紧密循环中做类似thread_yield()的事情?
答案 0 :(得分:2)
这是一个非常广泛的问题,所以没有办法给你一个非常具体的答案;我会给你一些一般性指导。
通常,在现代程序中,您可能会使用某种类型的线程池库来为您管理线程。这些通常有一些类型的idle_timeout,之后一个线程将被关闭;如果他们需要添加一些线程,他们将启动新的线程。
如果您正在管理自己的线程生命周期,则可以采取多种方法。也许等待事件或信号的事情可能适用于您的情况。在这种情况下,分配工作的线程可以引发事件以唤醒线程。如果这看起来太复杂,那么像在一段时间内睡觉一样简单的事情会比在循环中进行检查更好。
根据您的情况,其他一些方法可能有意义。但总的来说,你肯定想尝试利用已经编写过的库来处理这种情况,而不是试图从头开始编写。
非常感谢澄清的评论。看来这里有关于该主题的http://en.wikipedia.org/wiki/System_Idle_Process的一些有趣信息。如果该信息准确,则听起来像是特定的O / S;一些Windows版本只是在循环中调用暂停指令,而后来的调用硬件特定指令会导致时钟速度降低或其他节能措施。