Сколько процессорных ядер поддерживает планировщик .NET-задач?
Просто из любопытства я хотел бы знать, сколько процессорных ядер поддерживает планировщик задач .NET.
Windows Server 2012 поддерживает до 640 ядер. Был (есть).NET ограничен 64 или он будет использовать все доступные ядра?
Ответы
Ответ 1
.NET поддерживает все ядра. Ответ от Stehphen Toub на форуме MSDN Parallel Extensions:
TPL TaskScheduler
по умолчанию имеет значение .NET ThreadPool
. По умолчанию пул ограничивается одной группой процессором и, следовательно, до 64 ядер. Однако в .NET 4.5 вы можете установить флаг <Thread_UseAllCpuGroups enabled="true"/>
. Когда ваш компьютер имеет несколько групп процессоров, включение этого элемента приводит к тому, что среда выполнения распределяет управляемые потоки во всех группах ЦП, а не ограничивается одним, и, таким образом, планировщик по умолчанию может ориентироваться на все, что поддерживает ОС. (GCCpuGroup
также должен быть включен, чтобы этот параметр вступил в силу.)
Ответ 2
В соответствии с CLR через С#, 3-е изд., глава 25 Основные понятия:
Сегодня CLR [...] может использовать до 64 ядер при работе в 64-битной Windows. [... M] для работы в 32-разрядной версии Windows могут использоваться до 32 ядер.
Книга была написана в 2010 году, поэтому она содержит информацию, относящуюся к .Net 4.0 и Windows Server 2008 R2, но Я не думаю, что .Net 4.5 изменил что-либо в этом отношении. РЕДАКТИРОВАТЬ: Кажется .Net 4.5 действительно изменил это, см. ответ Peter Meinl, цитируя Стивена Туба.
Ответ 3
Эрик Липперт (источник)
Для бета-версии 1 CLR 4.0 планировщиком по умолчанию для TPL будет CLR пул потоков
Это примерно означает, что работа входит в очередь FIFO, и каждое ядро удаляет объект рабочей нагрузки. Другими словами, теперь нет фиксированной верхней границы для количества ядер, поддерживаемых CLR threadpool. Эта верхняя граница применяется другими сторонами - ОС, аппаратной и процессорной платформой.
По умолчанию количество потоков в пуле (за этот ответ)
- 1023 в Framework 4.0 (32-разрядная среда)
- 32768 в Framework 4.0 (64-разрядная среда)
- 250 на ядро в Framework 3.5
- 25 на ядро в Framework 2.0
Что технически позволяет много параллельных исполнений на выделенных ядрах.
Примечание это не значит, что в любой момент времени в пуле есть много потоков. CLR и ОС обычно пытаются медленно уменьшить количество потоков в пуле, чтобы освободить ресурсы, которые не используются.