一、理论分析
回答这个要先从线程时间精度(时间片)开始说起。很多参考书说,默认情况下,时间片为15ms 左右,但是这是已经过时的知识。在老的 Windows 操作系统里,应用程序模式时时间片 15ms 左右,准确一点是15.625 左右。服务器模式是其双倍。但是在微软推行.Net 普及 Task之后,规则已经改动,并且做了精细的调节。现在Win10的时间精度为1ms(不用担心谷歌浏览器修改时间精度了),Win2013服务器的时间精度为7ms,使用微软提供的测试工具可以测出来:ClockRes - Sysinternals | Microsoft Learn

命令行:powercfg /energy
我们可以通过它可以更直观的看出:

因为有这个请求在,所以无论如何最低的计时器分辨率都只能为1ms。
所以,现在Win10 默认状态下,Sleep(1) 占时不再是15ms,而是1ms 左右:


本文详细解释了Windows10中线程睡眠函数Thread.Sleep(0),Thread.Yield以及Thread.Sleep(1)的区别,强调了在不同场景下使用它们的效率和用途,尤其是在图形界面、多线程爬虫和线程调度中的应用。还讨论了使用Timer进行高速定时器时的精度问题及其解决方案。
最低0.47元/天 解锁文章
2027

被折叠的 条评论
为什么被折叠?



