Использование пула потоков фиксированного размера также проблематично в случае, если у нас есть много подкаталогов
Это предположение , и это просто:неправильно.
Вы предполагаете , что ограничивающим фактором является количество потоков.Но что заставляет тебя так думать?Скорее всего, другие элементы этой операции будут ограничивать общую производительность, такую как работа соответственно файловой системы.Если быть точным: система дисков ниже файловой системы.
Видите ли, вы не можете заставить произвольные проблемы идти быстрее , просто набрасывая на них (неограниченное) количество потоков.
Если вы серьезно относитесь к производительности, прекратите делать предположения.Вместо этого начните измерение.Проверьте, сколько времени требуется 1 потоку для «обработки» большего дерева.Делайте это неоднократно (скорее всего, кеширование файловой системы сыграет здесь большую роль).Затем посмотрите, что изменится, если вы используете фиксированный пул потоков.
Мое предположение : вы увидите некоторое ускорение, но довольно быстро, добавление большего количества потоков снова замедлит процесс.Угадайте здесь: пул с 4, максимум 8 потоками может дать вам «оптимальные» результаты.
В случае реализации вы можете поместить «новые» подкаталоги, требующие сканирования, в очередь, а затем ваши рабочие потоки получат их оточередь на обработку.