我看不出从你正在尝试做的事情中可以收集到什么有用的信息,但你可以通过标准的 Win32 API 更改 Windows 机器上的时钟分辨率。系统上需要更高响应时间的不同应用程序(例如多媒体应用程序)一直都在这样做。时钟分辨率可能在 0.5 毫秒到 15.6 毫秒甚至更高的范围内。所以让你的两台机器有相同的时钟分辨率。
Windows 7 默认配置为让线程在做出另一个调度决策之前运行 2 个时钟间隔。(即,我是否切换上下文?)Server 2008 R2 默认设置为线程调度决策之间的 12 个时钟间隔(也称为线程量程)。想法是线程量程越长,服务器操作系统就越有可能在不被中断的情况下开始和完成客户端请求。(即,更少的上下文切换。)但是您不会在服务器版本的 Windows 上获得“快速”的桌面体验。(通常没人关心。)
我看不出从你正在尝试做的事情中可以收集到什么有用的信息,但你可以通过标准的 Win32 API 更改 Windows 机器上的时钟分辨率。系统上需要更高响应时间的不同应用程序(例如多媒体应用程序)一直都在这样做。时钟分辨率可能在 0.5 毫秒到 15.6 毫秒甚至更高的范围内。所以让你的两台机器有相同的时钟分辨率。
Windows 7 默认配置为让线程在做出另一个调度决策之前运行 2 个时钟间隔。(即,我是否切换上下文?)Server 2008 R2 默认设置为线程调度决策之间的 12 个时钟间隔(也称为线程量程)。想法是线程量程越长,服务器操作系统就越有可能在不被中断的情况下开始和完成客户端请求。(即,更少的上下文切换。)但是您不会在服务器版本的 Windows 上获得“快速”的桌面体验。(通常没人关心。)
这是使用我的 Win7 PC 的示例。谷歌浏览器实际上要求将系统范围的时钟分辨率降低到 1 毫秒。您可以使用 Sysinternals 中的 clockres.exe 查看当前和基本时钟分辨率,并使用 powercfg.exe 查看哪些应用程序一直在更改您的时钟分辨率。
我的 CPU 每秒完成 3,501,000,000 个周期 (3.5GHz),计时器每 0.001 秒触发一次。3501000000 * 0.001 = 每个时钟间隔 3501000 个 CPU 周期。
1 个量子单元 = 时钟间隔的 1/3(三分之一),因此 1 个量子单元 = 1167000 个 CPU 周期。
假设在 3.501GHz 的速率下,每个 CPU 周期为 286 皮秒,即每个量子单元为 333.8 微秒。由于我的 PC 配置为 2 个时钟间隔的线程量程,并且每个时钟间隔为 3 个量程单位,这意味着我的 PC 大约每 2 毫秒做出一次线程调度决策。
我们甚至不要讨论可变长度的线程量程或抢占式调度程序(线程在被另一个更高优先级的线程抢占之前不会完成它的量程。)
因此,您想要比较运行完全不同代码集的两个不同操作系统上的上下文切换的实验对我来说仍然毫无意义,但也许这有帮助,至少在 Windows 方面是这样。