我正在阅读一本C#4.0书籍,它给出了线程池最大线程限制的以下默认值。
有谁可以告诉我可能会导致默认值大幅增加的原因,特别是对于64位?是否解决了上下文切换的问题?
过去,我们已经对线程池的大小设置了合理的限制,因为似乎有一个最佳点,之后我们的应用程序由于上下文切换而变慢。当然,我们会在更新目标框架后进行压力测试并重新进行基准测试。但是,任何人都可以了解为实现更大的线程池所做的框架改进吗?或者只是MS增加默认值看起来令人印象深刻?
答案 0 :(得分:3)
上下文切换的问题没有解决(由于其性质属于OS)。但是当你使用ThreadPool正确的方式(异步)时,上下文切换不是问题。由于新的TPL和其他一些需要解决的问题,.NET ThreadPool调度程序得到了改进。
尝试从CLR 4.0 ThreadPool Improvements
开始同时检查:Throttling Concurrency in the CLR 4.0 ThreadPool和此great video
答案 1 :(得分:1)
它被调整为在现代Big Iron上更好地工作。具有超过64个CPU内核的机器,即那种硬件。显然,他们在上下文切换方面遇到的麻烦较少。他们添加到调度程序的反馈循环很有趣,收集统计信息以做出更好的调度决策。但是,在你首先获得主要硬件之前,这些东西并没有开始。