忙碌等待
維基百科,自由的 encyclopedia
在軟體工程中,忙碌等待(也稱自旋;英語:Busy waiting、busy-looping、spinning)是一種以行程反覆檢查一個條件是否為真為根本的技術,條件可能為鍵盤輸入或某個鎖是否可用。忙碌等待也可以用來產生一個任意的時間延遲,若系統沒有提供生成特定時間長度的方法,則需要用到忙碌等待。不同的電腦處理器速度差異很大,特別是一些處理器設計為可能根據外部因素(例如作業系統上的負載)動態調整速率。因此,忙碌等待這種時間延遲技術容易產生不可預知、甚至不一致的結果,除非實現代碼來確定處理器執行「什麼都不做」迴圈的速度,或者迴圈代碼明確檢查即時時鐘。
此條目需要補充更多來源。 (2014年12月1日) |
此條目需要精通或熟悉相關主題的編者參與及協助編輯。 (2014年11月28日) |
在某些情況下,忙碌等待是有效的策略,特別是實現自旋鎖設計的作業系統上執行對稱多處理。不過一般來說,忙碌等待是應該避免的反模式[1],處理器時間應該用來執行其他任務,而不是浪費在無用的活動上。
對於多核CPU,忙碌等待的優點是不切換執行緒,避免了由此付出的代價。因此一些多執行緒同步機制不使用切換到核心態的同步對象,而是以使用者態的自旋鎖或其衍生機制(如輕型讀寫鎖)來做同步,付出的時間複雜度相差3個數量級。忙碌等待可使用一些機制來降低CPU功耗,如Windows系統中呼叫YieldProcessor,實際上是呼叫了SIMD指令_mm_pause。[來源請求]