В одном из моих проектов, который является своего рода агрегатором, я анализирую фиды, подкасты и т. Д. Из Интернета.
Если я использую последовательный подход, учитывая большое количество ресурсов, это займет довольно много времени дляобрабатывать их все (из-за проблем с сетью и тому подобного);
foreach(feed in feeds)
{
read_from_web(feed)
parse(feed)
}
Поэтому я хочу реализовать параллелизм и не могу решить, должен ли я в основном использовать ThreadPools для обработки с рабочими потоками или просто полагаться на TPLчтобы разобраться в этом.
ThreadPools наверняка справится со мной с помощью рабочих потоков, и я получу то, что ожидаю (и в средах с многоядерными процессорами также будут использоваться и другие ядра).
Но я все еще хочу рассмотреть TPL, так как это рекомендуемый метод, но я немного обеспокоен этим.Прежде всего я знаю, что TPL использует ThreadPools, но добавляет дополнительный уровень принятия решений.Меня больше всего беспокоит состояние, когда присутствует одноядерная среда.Если я не ошибаюсь, TPL начинается с количества рабочих потоков, равного количеству доступных процессорных ядер в самом начале.Я боюсь, что TPL даст результаты, аналогичные последовательному подходу для моего случая, связанного с IO.
Так что для операций, связанных с IO (в моем случае чтение ресурсов из Интернета), лучше всего использовать ThreadPools и контролировать вещиили лучше просто положиться на TPL?Может ли TPL также использоваться в сценариях, связанных с вводом-выводом?
Обновление : Моя главная проблема заключается в том, что - в одноядерном процессоре среда будет работать так же, как TPLпоследовательный подход или он все еще будет предлагать параллелизм?Я уже читаю Параллельное программирование с Microsoft .NET и, таким образом, book , но не смог найти точный ответ для этого.
Примечание: это повтор-фразировка моего предыдущего вопроса [ Возможно ли использовать параллелизм потоков и параллелизм вместе? ], что было совершенно неправильно сформулировано.