time.sleep是否有助于处理器?

时间:2016-07-18 13:14:15

标签: python c++

最近我在Stack Overflow(Python)上冲浪并看到this post Aaron Hall声称

  

持续运行while循环会消耗大量处理能力。添加睡眠周期(甚至只需一秒钟)可以大大减少这种使用。

这是真的吗?如果是这样,怎么样?同样的规则是否也适用于其他编程语言(即C ++)?

1 个答案:

答案 0 :(得分:10)

TL; DR如果您正在轮询每分钟发生一次的事件,您可能不希望每隔纳秒检查一次。

是的,这是真的。在线程中休眠会降低该线程的CPU使用率。当线程休眠时,它几乎不占用任何CPU时间。

是的,只要使用操作系统本机线程API实现休眠,对于任何语言都是如此。

为了直观地考虑这一点,让我们从链接的问题中考虑该程序的简化版本:

while end_condition_expression:
    if time_based_condition_expression:
        do_something()

现在,让我们简化世界,并假设程序是处理器上运行的唯一进程。

我们还假设,基于时间的条件每分钟都是真的。我们还假设执行end_condition_expressiontime_based_condition_expression需要花费10纳秒的CPU时间。

一分钟内消耗多少CPU时间?恰好一分钟== 60 000 000 000纳秒。在整个时间内,cpu的使用率为100%。循环将迭代60亿次。

现在,考虑一下这个程序的变化:

while end_condition_expression:
    if time_based_condition_expression:
        do_something()
    sleep_for_a_second()

循环在一分钟内执行了多少次? 60次迭代。一分钟内消耗多少CPU时间? 60 * 10 ns = 600 ns 。这是该计划使用的非睡眠版本的百万分之一。

实际上,从睡眠调用开始有一些开销,并且cpu时间与其他进程共享,并且涉及调度程序,并且确切的cpu使用率与我的假设完全匹配,但是这个想法保持不变。