Просто из любопытства я хотел бы знать, сколько процессорных ядер поддерживает планировщик задач .NET.
Windows Server 2012 поддерживает до 640 ядер. Был (есть).NET ограничен 64 или он будет использовать все доступные ядра?
Просто из любопытства я хотел бы знать, сколько процессорных ядер поддерживает планировщик задач .NET.
Windows Server 2012 поддерживает до 640 ядер. Был (есть).NET ограничен 64 или он будет использовать все доступные ядра?
.NET поддерживает все ядра. Ответ от Stehphen Toub на форуме MSDN Parallel Extensions:
TPL
TaskScheduler
по умолчанию имеет значение .NETThreadPool
. По умолчанию пул ограничивается одной группой процессором и, следовательно, до 64 ядер. Однако в .NET 4.5 вы можете установить флаг<Thread_UseAllCpuGroups enabled="true"/>
. Когда ваш компьютер имеет несколько групп процессоров, включение этого элемента приводит к тому, что среда выполнения распределяет управляемые потоки во всех группах ЦП, а не ограничивается одним, и, таким образом, планировщик по умолчанию может ориентироваться на все, что поддерживает ОС. (GCCpuGroup
также должен быть включен, чтобы этот параметр вступил в силу.)
В соответствии с 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, цитируя Стивена Туба.
Эрик Липперт (источник)
Для бета-версии 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 и ОС обычно пытаются медленно уменьшить количество потоков в пуле, чтобы освободить ресурсы, которые не используются.