Windows每秒执行一次线程切换的频率是多少?

时间:2012-09-07 15:07:12

标签: .net windows multithreading

Windows(通常)每秒多少次进行一次线程切换?这与.NET线程不同吗?或者反过来问:允许运行一个线程(例如,正常的线程优先级)多长时间?

3 个答案:

答案 0 :(得分:8)

Windows上下文切换的频率取决于系统“量子”。该量程的范围为10-15毫秒(每秒66-100次),具体取决于操作系统是客户端还是服务器。有关更多详细信息,我建议阅读Joe Duffy的书 Windows上的并发编程;它详细介绍了这类事情 - 例如。详细说明“客户端操作系统...是2个时钟间隔....在服务器操作系统上...是12个时钟间隔”。此外,他的文章[CLR Inside Out:使用并发性进行扩展] [1]是必读的。

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

如果没有理由进行上下文切换,则线程将获得所需的时间。

[1] http://www.360doc.cn/article/28217_2474333.html

答案 1 :(得分:1)

A context switching rate of 300 per second per processor is a moderate amountsource中说。

Windows2000有Pviewer utility来衡量它。

答案 2 :(得分:0)

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

在大多数系统中,大多数情况下,关于“量子”,“时间片”等的内容都是无关紧要的 - 只是I / O驱动的抢先式多任务处理中的一个注脚,它只会在更准备好的盒子上定期发生, CPU密集型,线程比核心,即。那些严重超载或运行CPU密集型应用程序。

允许正常优先级的线程运行直到它被预占,通常是它选择等待I / O或来自另一个线程的信令。即使它没有I / O或信令,即。是完全受CPU限制的,如果盒子永远不会超载,它可能仍然会永远运行(即从来没有比核心更准备好的线程)。