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