#.net #task-parallel-library
#.net #задача-параллельная-библиотека
Вопрос:
Мне нужно запустить около 150 задач. Прямо сейчас приложение использует только 25 потоков на ядро, и мне нужно, чтобы их было больше. Возможно ли увеличить этот предел?
Комментарии:
1. Из любопытства, что, по вашему мнению, вы получите от большего количества потоков? Каждое ядро может выполнять только один поток, поэтому у вас уже заблокировано 24 потока. С таким же успехом это могут быть задачи, которые еще не запланированы, и которые не поглощают ресурсы, которые не были бы запланированы потоком.
2. есть решение с полным исходным кодом?
Ответ №1:
Единственный способ контролировать фактическое количество потоков, которые будут фактически созданы, — это реализовать ваш собственный TaskScheduler
подкласс, где вы можете контролировать создание и планирование потоков, в которых будут выполняться задачи. Реализация по умолчанию использует потоки пула потоков вместе с несколькими эвристическими методами для определения максимального количества потоков, планируемых для каждого ядра.
Честно говоря, я был бы поражен, если бы вы могли превзойти реализацию по умолчанию. Выполняете ли вы какие-либо операции ввода-вывода в этих задачах? Используете ли вы асинхронный ввод-вывод?