了解WinAPI Sleep() 函數持續時間的差異
當使用1 毫秒的參數呼叫WinAPI Sleep() 函數時,它據觀察,線程實際上暫停的時間要長得多,通常約為15 毫秒。這種現象引起了人們對潛在系統問題的擔憂。
Windows 中的時間量化
Windows 採用時間量化機制進行執行緒調度。這意味著系統以離散間隔(稱為量子)調度線程。這些間隔的確切持續時間因多種因素而異,包括 Windows 版本和版本。平均而言,Windows 7 的運行時間量約為 15.6 毫秒。
對Sleep() 持續時間的影響
由於時間量化,任何非零值提供給Sleep() 的延遲參數向上捨入到最接近的量。這解釋了為什麼 Sleep(1) 呼叫實際上會將執行緒暫停 15 毫秒,這是最接近 1 毫秒的時間量。
驗證
驗證此行為,您可以執行提供的程式碼片段。根據系統的計時器解析度設置,運行程式碼可能會產生不同的結果。如果系統範圍的計時器解析度已手動設定為 1 毫秒,您可能會觀察到較短的睡眠時間。然而,預設情況下,Windows 7 使用 15.6 毫秒的計時器分辨率,導致觀察到睡眠時間延長。
結論
Sleep() 函數的差異持續時間歸因於 Windows 執行緒調度程序中固有的時間量化機制。這種舍入可確保執行緒調度高效且可預測地執行,從而防止潛在的執行緒調度衝突。
以上是為什麼 WinAPI Sleep(1) 會導致 15 毫秒暫停?的詳細內容。更多資訊請關注PHP中文網其他相關文章!