最近我在 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_expression
和 time_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/