12

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

4

3 回答 3

12

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

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

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

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

于 2012-09-07T15:13:40.190 回答
1

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

Windows2000 有Pviewer 实用程序来测量它。

于 2012-09-07T15:12:34.157 回答
0

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

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

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

于 2012-09-07T17:19:31.083 回答