请再次清楚一下MS Windows系统中这三件事情之间的技术差异。 首先是Timer Resolution
您可以通过ntdll.dll非导出函数NtSetTimerResolution
和NtQueryTimerResolution
来设置和获取,或使用Sysinternals的clockres.exe
工具。
Chrome浏览器前段时间使用的可耻的技巧之一是在networking上performance更好。 (他们现在只剩下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在某些情况下也是这样做的。 我个人觉得整个系统更好,更清晰,不会因为很多人警告而放慢速度。
你可以通过任务pipe理器设置定时器分辨率和应用程序I / O和内存优先级(实时/高/高于正常/正常/低/背景等)之间的区别,除了定时器分辨率设置为整个系统,而不是一个应用程序?
他们和Processor scheduling
选项之间的区别是什么,你可以从CMD > SystemPropertiesPerformance.exe
– >高级选项卡进行调整。 默认情况下,用户的操作系统版本(如XP / Vista / 7/8 / 8.1 / 10)设置程序的性能,服务器的版本(2k3 / 2k8 / 2k12 / 2k16)关心后台服务。 这个选项如何与上面那两个交互?
timeBeginPeriod()是这样做的记录的API。 它被记录为影响睡眠()的准确性。 戴夫·卡特勒(Dave Cutler)可能不喜欢实现它,但允许Win 3.1代码进入端口使其成为必要。 当时的多媒体api是必要的,以保持贫血的硬件与小缓冲区没有口吃。
非常简陋,但是在内核中没有其他的好办法。 处理器内核的正常状态将在HLT指令上停止。 消耗(几乎)没有电力,唯一的方法来恢复它是一个硬件中断。 这是什么,它打开了时钟中断率。 正常情况下,每秒64次,你可以使用timeBeginPeriod,2000与本机api连接起来。
是的,功耗相当不好。 时钟中断处理程序还会激活线程调度程序,这是一个相当不起眼的代码块。 睡眠()调用现在可以以(几乎)时钟中断速率唤醒的原因。 在Win8.1顺便说一句,我唯一注意到的变化是,它不是那么敏感,1毫秒的速度可能会导致2毫秒的延迟。
Chrome确实是臭名昭着的。 我一直认为它为在移动操作系统和电池供电设备上做大生意的公司提供了竞争优势。 开始这个网站的家伙发现有什么不对劲 。 对浏览器来说,更负责任的做法是把速度提高到10毫秒,这是获得精确的GIF动画所必需的。 多媒体播放不再需要它了。
否则这对调度优先级根本没有影响。 我没有检查的一个细节是线程量是否相应地改变(一个线程在驱逐前可能拥有一个核心的数量,3个是工作站)。 我怀疑它的确如此。