2017-02-25 93 views
1

請再次清楚MS Windows系統上這三件事之間的技術差異。首先是Timer Resolution,您可以通過ntdll.dll非導出函數NtSetTimerResolutionNtQueryTimerResolution設置並獲取,或者使用Sysinternals的clockres.exe工具。Windows定時器分辨率vs應用程序優先級vs處理器調度

前段時間Chrome瀏覽器使用的一種可恥的伎倆是在網絡上表現更好。 (他們目前只爲Flash插件留下高分辨率技巧)。 https://bugs.chromium.org/p/chromium/issues/detail?id=153139 https://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/

事實上,在某些情況下,Visual Studio和SQL Server也會這樣做。我個人覺得它可以讓整個系統更好,更清晰,不會像很多人警告那樣慢。

您可以通過任務管理器設置的定時器分辨率和應用程序I/O與內存優先級(實時/高/正常/正常/低/背景/等)之間的區別是什麼,除了定時器分辨率爲整個系統設置,而不是一個應用程序?

他們和Processor scheduling選項之間的區別是什麼,您可以從CMD > SystemPropertiesPerformance.exe - >高級選項卡進行調整。默認情況下,用戶的操作系統版本(如XP/Vista/7/8/8.1/10)設置程序的性能,服務器版本(2k3/2k8/2k12/2k16)確實關心後臺服務。這個選項如何與上述兩者交互?

+0

'NtSetTimerResolution'和'NtQueryTimerResolution'被*導出* - 所以您可以輕鬆地調用它 – RbMm

回答

1

timeBeginPeriod()是這樣做的記錄api。它被記錄爲影響Sleep()的準確性。戴夫卡特勒可能不喜歡實現它,但允許Win 3.1代碼端口使其成爲必要。當時的多媒體api是必要的,以保持貧血的硬件和小緩衝區沒有口吃。

非常粗糙,但在內核中沒有其他好方法。處理器內核的正常狀態將在HLT指令中停止。消耗(幾乎)沒有電力,唯一的方法來恢復它是一個硬件中斷。這就是它所做的,它會提高時鐘中斷速率。正常情況下,每秒可以打64次,你可以使用timeBeginPeriod,2000和本機api將它打到1000。

是的,功耗很差。時鐘中斷處理程序還會激活線程調度程序,這是一個相當不起眼的代碼塊。 Sleep()調用現在可以幾乎以(幾乎)時鐘中斷速率喚醒的原因。在Win8.1順便說一句,我注意到的唯一變化是它不再那麼靈敏,1毫秒的速率可能導致2毫秒的延遲。

鉻確實是臭名昭着的ab /使用heck out它。我一直認爲它爲在移動操作系統和電池供電設備上做大生意的公司提供了競爭優勢。開始這個網站noticed something was wrong的傢伙。對瀏覽器來說,更負責任的做法是將速度提升到10毫秒,這對於獲得準確的GIF動畫是必不可少的。多媒體播放不再需要它了。

這對調度優​​先級根本沒有任何影響。我沒有檢查的一個細節是線程量是否相應地改變(一個線程在被驅逐之前可能擁有一個核心的滴答數量,3個工作站)。我懷疑它的確如此。

相關問題