我想知道time.sleep(5)
和以下代码之间的区别是什么:
import time
start_time = time.time()
while True:
if time.time() - start_time > 5:
break
print("Five seconds passed")
此外,使用第一种解决方案还是第二种解决方案更好?像我一样使用while
循环可能不是一个好的解决方案。
谢谢你的建议。
while True
循环被称为Busy Wait[Wikipedia],因为它将使处理器保持运行。这可能会使1个核心保持在100%。
time.sleep()
是空闲等待,因为处理器没有任何事情可做。如果没有其他东西使用,您的CPU将处于0%。
现在,如果你想完全理解它,事情会变得困难,这可能取决于操作系统。
-
如果不更改,Windows中的线程调度将在1/64s发生。无论你的程序做什么,它的精度都可能是1/64s,因为这是Windows唤醒线程的时间间隔。
-
保持CPU繁忙将保持线程优先级不变甚至更低。
-
让CPU保持忙碌会让它暖和起来。CPU不喜欢加热,它们实际上可能会减慢或至少停止TurboBoost(或类似的CPU功能(
-
保持CPU空闲将增加线程优先级。它将使用一个同步对象并调用WaitForSingleObject(([MSDN],从而将CPU返回给操作系统。
实际会发生什么,或者哪种方法更精确,都很难预测。要完全了解Windows上会发生什么,请阅读《Windows内部》一书[亚马逊]关于进程和线程的第1部分。