Windows(通常)每秒执行一次线程切换的频率如何? 这是不同于.NET线程? 或者反过来问:一个线程(比如普通的线程优先级)允许运行多长时间?
如何让Windows本机查找.NET的TreeView?
如何使用C#将Windows系统时钟设置为正确的本地时间?
.NET Thread.Sleep是否受到DST(或系统时间)更改的影响?
.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限制的,如果该盒永远不会超载,它仍然可以永远运行(即永远不会有比线程更多的线程)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。