.NET任务调度程序支持多少个处理器核心

时间:2012-09-16 07:34:22

标签: .net multithreading task-parallel-library

出于好奇,我想知道.NET任务调度程序支持多少处理器内核。

Windows Server 2012最多支持640个内核。 (是).NET限制为64还是会使用所有可用的内核?

3 个答案:

答案 0 :(得分:10)

.NET确实支持所有核心。 Stehphen Toub在MSDN Parallel Extensions Forum中的回答:

  

默认的TPL TaskScheduler以.NET ThreadPool为目标。默认情况下,池限制为单个processor group,因此限制为64个核心。但是,在.NET 4.5中,您可以设置<Thread_UseAllCpuGroups enabled="true"/>标志。当您的计算机具有多个CPU组时,启用此元素会导致运行时跨所有CPU组分发托管线程,而不是仅限于一个,因此默认调度程序可以针对操作系统支持的任何内容。 (GCCpuGroup也必须启用此设置才能生效。)

答案 1 :(得分:3)

Eric Lippert(source

  

对于CLR 4.0的Beta 1,TPL的默认调度程序将是 CLR   线程池

粗略表示工作进入FIFO队列,每个核心将工作负载项出列。换句话说,现在CLR threadpool支持的核心数没有固定的上限。这个上限由其他方强制执行 - 操作系统,硬件和CPU平台。

池中的默认线程数(每this answer

  
      框架4.0(32位环境)中的
  • 1023
  •   框架4.0(64位环境)中的
  • 32768
  •   
  • Framework 3.5中每个核心250个
  •   
  • Framework 2.0中的每个核心
  •   

哪些技术上允许在专用内核上进行多次并行执行。

注意这并不意味着,在任何给定的时刻,池中都有很多线程。 CLR和OS通常会尝试缓慢减少池中的线程数以释放未使用的资源。

答案 2 :(得分:2)

根据CLR via C#, 3rd ed.,第25章基础知识:

  

今天,在64位Windows上运行时,CLR [...]最多只能使用64个内核。 [... M]在32位版本的Windows上运行时,已安装的应用程序最多可以使用32个核心。

这本书写于2010年,因此它包含与.Net 4.0和Windows Server 2008 R2相关的信息,但我不认为.Net 4.5在这方面有任何改变编辑:看来.Net 4.5确实改变了这一点,请参阅Peter Meinl的回答引用Stephen Toub。

相关问题