time.sleep() 和迭代直到秒数过去之间的区别
differences between time.sleep() and iterating until the seconds pass
我想知道 time.sleep(5)
和下面这段代码之间的 difference/s was/were 是什么:
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()
是Idle Wait,因为处理器无事可做。如果没有被其他东西使用,你的 CPU 将是 0%。
而现在,事情变得困难了,如果你想完全理解它,这可能取决于操作系统。
Windows 中的线程调度发生在 1/64 秒(如果未更改)。无论您的程序做什么,它的精度都可能是 1/64 秒,因为这是 Windows 唤醒线程的时间间隔。
保持 CPU 繁忙将保持线程优先级相同甚至更低。
让 CPU 忙碌会让它变得温暖。 CPU 不喜欢高温,它们实际上可能会减慢速度或至少停止 TurboBoost(或类似的 CPU 功能)
保持 CPU 空闲将增加线程优先级。它将使用同步对象并调用 WaitForSingleObject() [MSDN],从而将 CPU 返回给操作系统。
实际会发生什么或哪种方法更精确是很难预测的。要完全了解 Windows 上发生的情况,请阅读有关进程和线程的 Windows Internals book [Amazon] 第 1 部分。
我想知道 time.sleep(5)
和下面这段代码之间的 difference/s was/were 是什么:
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()
是Idle Wait,因为处理器无事可做。如果没有被其他东西使用,你的 CPU 将是 0%。
而现在,事情变得困难了,如果你想完全理解它,这可能取决于操作系统。
Windows 中的线程调度发生在 1/64 秒(如果未更改)。无论您的程序做什么,它的精度都可能是 1/64 秒,因为这是 Windows 唤醒线程的时间间隔。
保持 CPU 繁忙将保持线程优先级相同甚至更低。
让 CPU 忙碌会让它变得温暖。 CPU 不喜欢高温,它们实际上可能会减慢速度或至少停止 TurboBoost(或类似的 CPU 功能)
保持 CPU 空闲将增加线程优先级。它将使用同步对象并调用 WaitForSingleObject() [MSDN],从而将 CPU 返回给操作系统。
实际会发生什么或哪种方法更精确是很难预测的。要完全了解 Windows 上发生的情况,请阅读有关进程和线程的 Windows Internals book [Amazon] 第 1 部分。