嗨而我編程我不得不做一個選擇:阻止IO和While 1的區別?
while not cont_flag :
pass
,並使用Event對象:
if not const_flag.is_set() :
const_flag.wait()
我想知道是否有兩個梅索德之間的性能差異
嗨而我編程我不得不做一個選擇:阻止IO和While 1的區別?
while not cont_flag :
pass
,並使用Event對象:
if not const_flag.is_set() :
const_flag.wait()
我想知道是否有兩個梅索德之間的性能差異
有。第一種方法稱爲busy waiting,與blocking有很大不同。在繁忙的等待中,隨着while循環執行,CPU正在不斷使用。在阻塞時,線程實際上被暫停,直到滿足喚醒條件。
參見本討論: What is the difference between busy-wait and polling?
第一種被稱爲busy waiting,它會在等待吃起來的CPU時間100%。有一些更好的做法來建立一些信號傳遞機制來傳達事件(例如完成某些事情)。
Python只允許一次執行一個線程,無論系統可能有多少個cpus。如果有多個線程可以運行,python會定期切換它們。如果你像第一個例子那樣「忙於等待」,while循環會佔用你的其他線程可用於工作的大部分時間。雖然第二種解決方案要優越得多,但如果您最終使用第一種解決方案,請爲其添加適度的睡眠。
while not cont_flag:
time.sleep(.1)
阻塞IO不會將您的CPU變成烤麪包機。相反,用戶進程只是等待系統說「嘿,你有數據,做些什麼」(在這種情況下,IO調用「解除阻塞」)。 – user2864740
@ user2864740請避免在評論中回答問題。您可以將其作爲回答發佈。 –