python - time.sleep 对处理器有帮助吗?

标签 python c++

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

constantly running while loops can consume a lot of processing power. Adding a sleep period (even only a second) can greatly reduce that usage.

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

最佳答案

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

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

是的,只要休眠是使用操作系统 native 线程 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 纳秒 = 600 纳秒。这是该程序的非 sleep 版本所用量的亿分之一。

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

关于python - time.sleep 对处理器有帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38437670/

相关文章:

python - tmux - 如何在 Pane 中显示图像?

c++ - 自动引用 vector ?

c++ - 对象分配的困惑行为

python - 计算列表的累积和,直到出现零

python - 如何在python中取数字的第n位

python - 如何获取 Google App Engine 上 Python FastAPI 脚本的 CPU 和内存使用情况

c++ - 为什么部分初始化一个类然后调用委托(delegate) ctor 失败?

c++ - 应用于多个参数的 STL 算法,例如 for_each

c++ - 来自 C/C++ 应用程序的 Android ADB API

Python Black Jack 游戏变种