Что такое пул потоков и как он работает
Что проверяют
Понимаете ли вы, что поток это дорогой ресурс операционной системы, а пул это способ ограничить их число и переиспользовать. В мобильной разработке добавляется своя сторона: главный поток трогать нельзя, а фоновая задача обязана либо корректно отмениться, либо пережить пересоздание экрана.
Как отвечать
Пул потоков это набор заранее живущих рабочих потоков и очередь задач между ними. Отправитель кладёт задачу в очередь, свободный поток забирает её, выполняет и возвращается за следующей. Потоки создаются редко, а число одновременно работающих задач ограничено сверху.
Параметры, которые стоит назвать: базовое и максимальное число потоков, тип и ёмкость очереди, время жизни лишнего простаивающего потока, политика отказа при переполнении очереди.
Размер подбирается по характеру работы. Для вычислений разумный ориентир это число ядер: больше потоков не ускорит, а добавит переключений контекста. Для ожидания сети и диска потоков нужно заметно больше, потому что они почти всё время простаивают.
В мобильной платформе поверх этого лежат готовые механизмы: планировщик отложенной работы для задач, которые должны пережить закрытие приложения, и диспетчеры корутин, где под ожиданием стоит эластичный пул, а под вычислениями пул размером с число ядер. Результат в любом случае возвращается на главный поток.
Где спотыкаются
Берут пул с неограниченной очередью и считают, что максимальное число потоков что-то ограничивает. Пока очередь принимает задачи, потоки сверх базовых не создаются: растёт не параллелизм, а память и задержка.
Блокируют поток пула ожиданием другой задачи из того же пула. На маленьком пуле это гарантированный тупик, который воспроизводится только под нагрузкой и выглядит как зависший экран без единого исключения.
Забывают про жизненный цикл. Задача держит ссылку на экран, экран уничтожен, результат приходит в никуда, а память утекает. Отмена при завершении области видимости и проверка актуальности перед показом результата обязательны.