Windows计时器解析与应用程序优先级与处理器计划

时间:2017-02-25 17:09:03

标签: windows performance visual-c++ windows-services

请再次明确MS Windows系统这三件事之间的技术差异。首先是Timer Resolution您可以设置并通过ntdll.dll非导出函数NtSetTimerResolutionNtQueryTimerResolution或使用Sysinternals'clockres.exe工具。

前一段时间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)负责后台服务。这个选项如何与上面这两个相互作用?

1 个答案:

答案 0 :(得分:1)

timeBeginPeriod()是记录在案的api。记录会影响Sleep()的准确性。戴夫卡特勒可能不喜欢实现它,但允许Win 3.1代码移植使它成为必要。当时的多媒体api是必要的,以保持贫血的硬件与小缓冲区没有口吃。

非常粗糙,但在内核中没有其他好办法。处理器核心的正常状态将在HLT指令上停止。消耗(几乎)没有电力,恢复它的唯一方法是使用硬件中断。它的作用是什么,它提高了时钟中断率。通常每秒刻度64次,你可以使用timeBeginPeriod,2000使用原生api将其填充到1000.

是的,功耗非常差。时钟中断处理程序还会激活线程调度程序,这是一个相当不起眼的代码块。 Sleep()调用现在可以(几乎)以时钟中断速率唤醒的原因。在Win8.1顺便说一下,我唯一注意到的变化是它不再具有响应性,1毫秒的速率可能导致长达2毫秒的延迟。

Chrome确实因ab /使用它而臭名昭着。我一直认为它为在移动操作系统和电池供电设备上做大生意的公司提供了竞争优势。启动此网站的人noticed something was wrong。对浏览器更负责任的事情是将速率提高到10毫秒,这是获得准确的GIF动画所必需的。多媒体播放不再需要它了。

否则对调度优先级没有任何影响。我没有检查的一个细节是线程量是否相应地改变(线程在被驱逐之前可能拥有核心的滴答数,3对于工作站而言)。我怀疑它确实如此。