Вероятно, время поиска диска является ограничивающим фактором (это одно из самых распространенных узких мест при выполнении Make, которое обычно включает в себя множество небольших файлов). Простые конструкции файловой системы имеют запись в каталоге и требуют указателя на блоки диска для файла, что гарантирует минимум 1 поиск на файл.
Если вы используете Windows, я бы переключился на использование NTFS (которая хранит небольшие файлы в записи каталога (-> сохранить один поиск диска на файл). Мы также используем сжатие дисков, (больше вычислений, но процессоры дешевы и быстры, но меньше места на диске -> меньше времени чтения); это может не иметь значения, если все ваши файлы маленькие. Может быть эквивалент файловой системы Linux, если вы там.
Да, вы должны запустить кучу потоков для чтения файлов:
forall filename in list: fork( open filename, process file, close filename)
Возможно, вам придется регулировать это, чтобы не допустить исчерпания потоков, но я бы стрелял сотнями, а не 2 или 3. Если вы сделаете это, вы скажете ОС, что она может читать множество мест на диске, и он может заказать несколько запросов путем размещения на диске
( алгоритм лифта ), и это также поможет минимизировать движение головы.