(Как) Использует ли TPL (CLR) пул потоков? - PullRequest
12 голосов
/ 26 декабря 2010

В настоящее время я изучаю Task Parallel Library и где-то читал, что TPL на самом деле использует механизм пула потоков из CLR-Level. Я не смог найти ни одной статьи, подтверждающей эту информацию. Я знаю, что TPL имеет очереди задач для каждого потока и использует некоторый специальный алгоритм кражи работы для балансировки. Насколько я знаю, он создает один поток для каждого процессора. Пулы потоков начали использовать объекты задач TPL начиная с .NET 4.

Не могу понять, как TPL использует пул потоков. Состояния шаблона пула потоков, рабочие элементы помещаются в очередь, и свободные потоки в пуле потоков получают один из этой очереди. TPL, однако, хранит элементы (задачи) в очередях потоков, и при необходимости работает похищение работ ... Таким образом, совсем по-другому. Где моя ошибка?

дополнительный вопрос: поскольку это был мой первый вопрос о переполнении стека, я не уверен, что он подходит. Это так?

1 Ответ

10 голосов
/ 26 декабря 2010

В TPL TaskScheduler отвечает за фактическую постановку задач в очередь для выполнения. Планировщик по умолчанию будет использовать пул потоков - но я полагаю, что это новая реализация пула потоков, которая на самом деле выполняет ловкость работы.

У Даниэля Мота есть сообщение в блоге с некоторыми подробностями, которые могут оказаться полезными.

...