2. Потом я начал гонять «стресс-тест» с загрузкой 500–1000 файлов, и тут оказалось, что «терпению машины» тоже есть предел, так что поставил ограничение (при работе с файлами 40–45 потоков со скрипом проскакивают, хотя и почти в ноль выедают выделяемые программе «ресурсы времени CPU» (прочие программы почти не тормозят); при использовании 50-ти потоков программа начинает пропускать файлы, (видимо упираясь в максимально доступное количество открытых файлов); выше 100-а потоков приводит к полному зависанию очереди «синхронизированных секций»).
3. Спокойная работа доступна при 10–30 потоках (хотя «максимальное ускорение» при 45-ти потоках весьма заметно — где-то на треть: 653 совершенно разных файла отработало за минимальные 80-90 секунд, а на 20-ти потоках туже работу выполнило в лучшем случае за 147 секунд).
4. Кстати, что забавно, число реальных ядер и аппаратных потоков почти ни на что не влияют (главное, чтобы тут их было больше одного).
В общем, понятно, что вся многопоточная часть загрузки нуждается в переработке (например, буквально только что нашел и исправил утечку памяти при обработке исключения, и это явно еще не всё, что там нужно исправить...), но сама идея понятна: нужно проверять не только (и не столько) количество ядер, а в первую очередь число работающих в системе потоков, + если внутри потока используются файловые операции, нужно точно знать доступное программе количество одновременно открытых файлов.
Но, возможно, это ещё не всё. Так что народ,какие у вас есть идеи на этот счёт?

Зы
Скрин "тестового стенда" ( время загрузки заметно плавает и каждый раз немного другое )
