.NET 4.0 Threadpooling有哪些改进?

时间:2010-10-18 12:12:30

标签: .net multithreading threadpool .net-4.0

我正在阅读一本C#4.0书籍,它给出了线程池最大线程限制的以下默认值。

  • 1023在Framework 4.0中的32位环境中
  • 32768 in Framework 4.0 in 64-bit environment
  • Framework 3.5中每个核心250个
  • Framework 2.0中的每个核心

有谁可以告诉我可能会导致默认值大幅增加的原因,特别是对于64位?是否解决了上下文切换的问题?

过去,我们已经对线程池的大小设置了合理的限制,因为似乎有一个最佳点,之后我们的应用程序由于上下文切换而变慢。当然,我们会在更新目标框架后进行压力测试并重新进行基准测试。但是,任何人都可以了解为实现更大的线程池所做的框架改进吗?或者只是MS增加默认值看起来令人印象深刻?

2 个答案:

答案 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内核的机器,即那种硬件。显然,他们在上下文切换方面遇到的麻烦较少。他们添加到调度程序的反馈循环很有趣,收集统计信息以做出更好的调度决策。但是,在你首先获得主要硬件之前,这些东西并没有开始。