阻止IO和1之间的区别?

时间:2014-02-13 17:30:29

标签: python multithreading while-loop

我正在编程时我必须做出选择:

while not cont_flag :
    pass

并使用Event对象:

if not const_flag.is_set() :
    const_flag.wait()

我想知道两种方法之间的性能是否存在差异

3 个答案:

答案 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)