В одному зі своїх проектів, який є свого роду агрегатором, я аналізую канали, подкасти тощо з Інтернету.
Якщо я використовую послідовний підхід, враховуючи велику кількість ресурсів, для їх обробки потрібен досить багато часу (через проблеми з мережею та подібні речі);
foreach(feed in feeds)
{
read_from_web(feed)
parse(feed)
}
Отже, я хочу реалізувати паралельність і не міг вирішити, чи повинен я в основному використовувати ThreadPools для обробки з робочими потоками, або просто покладатися на TPL, щоб його сортувати.
ThreadPools напевно впорається з роботою для мене за допомогою робочих потоків, і я отримаю те, що я очікую (а в багатоядерних центральних процесорах також будуть використані й інші ядра).
Але я все одно хочу також розглянути TPL, оскільки це рекомендований метод, але я трохи стурбований цим. Перш за все, я знаю, що TPL використовує ThreadPools, але додає додатковий рівень прийняття рішень. Мене здебільшого турбує стан, коли є одноядерне середовище. Якщо я не помиляюся, TPL починається з числа робочих потоків, рівного кількості доступних CPU-ядер на самому початку. Я боюся, що TPL не дасть результатів, подібних до послідовного підходу для мого випадку, пов'язаного з IO.
Тож для операцій, пов’язаних з IO (у моєму випадку читання ресурсів з Інтернету), чи найкраще використовувати ThreadPools і контролювати речі, або краще просто покладатися на TPL? Чи може TPL також використовуватися в сценаріях, пов'язаних з IO?
Оновлення : Моє головне занепокоєння полягає в тому, що - в одноядерному процесорному середовищі TPL буде просто поводитися як послідовний підхід або все одно запропонує паралельність? Я вже читаю паралельне програмування з Microsoft .NET і тому книгу, але не міг знайти точної відповіді на це.
Примітка: це переформулювання мого попереднього запитання [ чи можна використовувати паралельність потоків та паралелізм разом? ], що було сформульовано неправильно.