我有一个多线程应用程序,其中一个线程具有时间紧迫的工作。启动时,此时间紧迫线程将设置为“时间紧迫”优先级。此外,应用程序中的其他线程都设置了处理器亲和力掩码,因此,这个时间紧迫的线程始终可以完全访问8个CPU内核(两个Xeon中共有12个CPU内核)。服务器上没有其他应用程序在运行(Windows自己运行的服务除外)。
尽管如此,即使采取了所有这些预防措施,我仍然记录了一些事件,这些事件在这个时间紧迫的线程中一次没有运行80-100ms。我的日志记录表明,有时它会中止任务,并在经过80-100毫秒的时间后再次恢复。
我的问题是:是什么原因导致这些80-100ms线程中断,和/或我如何找出导致这些中断的原因?
一些其他可能相关的信息:
过去几天我进行了许多测试,并且能够收集一些有趣的数据,下面将对其进行总结。
最终,我认为问题归结于Windows无法很好地处理1)线程优先级,尤其是2)优先级反转问题。令人惊讶的是,Windows 10似乎比Windows 7更好地处理了这些问题。
Microsoft关于操作系统如何处理优先级倒置的简短article,但是当CPU负载了多个线程时,这种策略似乎不足以防止关键线程上的长时间延迟,特别是在Windows 7上,这似乎是不足的。