Windows每秒进行一次线程切换的频率如何?

Windows(通常)每秒执行一次线程切换的频率如何? 这是不同于.NET线程? 或者反过来问:一个线程(比如普通的线程优先级)允许运行多长时间?

Windows上下文切换的频率取决于系统“量子”。 这个量子的范围从10-15毫秒(每秒66-100次),取决于操作系统是客户端还是服务器。 有关更多详细信息,我建议阅读Joe Duffy的“ Windows上并行编程”一书。 它把事情细化到这样的事情上 – 例如,“客户端操作系统…是2个时钟间隔……在服务器操作系统…上是12个时钟间隔”的细节。 另外他的文章“ CLR Inside Out:使用并发性来扩展性”是必读的。

您可以对“量子”长度进行“编辑”。 如果在“性能选项/高级”中将“调整为最佳性能:”设置为“程序”,则会获得更短的量程。 如果您将其设置为“后台服务”,则会获得更长的量。

如果没有上下文切换的理由,一个线程将获得尽可能多的时间。

消息来源说, A context switching rate of 300 per second per processor is a moderate amount的。

Windows2000有Pviewer实用程序来衡量。

在典型的系统中,这高度依赖于I / O负载。 当线程调用I / O时,大量的磁盘和网络活动将产生大量的上下文切换,并被阻塞,之后再次准备就绪。 正在运行的应用程序的复杂性和设计也会影响上下文切换速度 – 与大量线程,多个锁,锁内过度工作,与通信数据的大小相比太多的线程间通信,愚蠢的轮询等的应用程序将驱动提高上下文变化率。

在大多数系统中,大部分时间内,关于“量子”,“时间片”等的东西都是无关紧要的 – 仅仅是I / O驱动的抢占式多任务的脚注,只有在更加准备好,CPU密集,线程比核心,即。 那些严重超载或运行CPU密集型应用程序。

正常优先级的线程被允许运行,直到它被prempted,通常通过它选择等待I / O或来自另一个线程的信号。 即使它没有I / O或信号,即。 是完全受CPU限制的,如果该盒永远不会超载,它仍然可以永远运行(即永远不会有比线程更多的线程)。