Что улучшилось в .NET 4.0 Threadpooling? - PullRequest
1 голос
/ 18 октября 2010

Я читаю книгу C # 4.0, в которой приведены следующие значения по умолчанию для максимального ограничения потока для пула потоков.

  • 1023 в Framework 4.0 в 32-разрядной среде
  • 32768 в Framework 4.0 в 64-битной среде
  • 250 на ядро ​​в Framework 3.5
  • 25 на ядро ​​в Framework 2.0

Может кто-нибудь сказать мне, что, возможно, вызвало такое значительное увеличение значений по умолчанию, особенно для 64-битных? Были ли решены проблемы с переключением контекста?

Раньше мы устанавливали разумные ограничения на размер пула потоков, потому что, кажется, есть приятное место, после которого наше приложение замедляется из-за переключения контекста. Естественно, мы проведем стресс-тест и проведем повторный тест после обновления целевой структуры. Но может ли кто-нибудь пролить свет на то, какие улучшения были внесены для обеспечения большего пула потоков? Или просто MS увеличивает значения по умолчанию, чтобы выглядеть эффектно?

Ответы [ 2 ]

3 голосов
/ 18 октября 2010

Проблемы с переключением контекста не решены (по своей природе относится к ОС).Но когда вы идете правильным путем (асинхронно) с переключателями контекста ThreadPool, это не проблема.Планировщик .NET ThreadPool был улучшен благодаря новому TPL и другим потребностям, которые он должен решить.

Попробуйте начать с CLR 4.0 Улучшения ThreadPool

Также проверьте: Регулирование параллелизма в CLR 4.0 ThreadPool и это отличное видео

1 голос
/ 18 октября 2010

Он был настроен для лучшей работы на современном Big Iron.Машины с более чем 64 ядрами процессора, такого рода оборудование.Очевидно, у них меньше проблем с переключением контекста.Цикл обратной связи, который они добавили в планировщик, интересен, собирая статистику, чтобы принимать лучшие решения по планированию.Но эта штука не сработает, пока у вас не появится основное оборудование.

...