我正在编程时我必须做出选择:
while not cont_flag :
pass
并使用Event对象:
if not const_flag.is_set() :
const_flag.wait()
我想知道两种方法之间的性能是否存在差异
答案 0 :(得分:3)
有。第一种方法称为busy waiting,与blocking非常不同。在忙碌的等待中,在执行while循环时不断使用CPU。在阻塞中,线程实际上被挂起,直到满足唤醒条件。
另见本讨论: What is the difference between busy-wait and polling?
答案 1 :(得分:2)
第一个被称为busy waiting,它会在等待时占用100%的CPU时间。通过一些信号机制来传达事件(例如已经完成的事情),这是一种更好的做法。
答案 2 :(得分:1)
Python只允许一次执行一个线程,无论您的系统有多少cpu。如果准备好运行多个线程,python将定期在它们之间切换。如果你在第一个例子中“忙等”,那么while循环会占用你的其他线程可用于工作的大部分时间。虽然第二个解决方案要优越得多,但如果您最终使用第一个解决方案,请为其添加适度的睡眠。
while not cont_flag:
time.sleep(.1)