Сначала вам нужно решить, какое у вас узкое место - ввод-вывод (чтение файлов) или процессор (их обработка). Если это ввод / вывод, одновременное чтение нескольких файлов вам не очень поможет, максимум, чего вы можете достичь - это иметь один поток для чтения файлов, а другой обрабатывать их. Поток обработки будет выполнен до того, как станет доступен следующий файл.
Я согласен с @asawyer, если это всего лишь 100 МБ, вы должны прочитать файл целиком в память одним махом. С таким же успехом вы могли бы прочитать 5 из них полностью в память, это не имеет большого значения.
РЕДАКТИРОВАТЬ: После осознания все файлы находятся на одном жестком диске, и эта обработка занимает больше времени, чем чтение файла.
Вы должны последовательно читать файлы в потоке. Как только файл прочитан, запустите другой поток, который обрабатывает обработку, и начните чтение второго файла в первом потоке. После прочтения второго файла запустите другой поток и т. Д.
Вы должны убедиться, что вы не запускаете больше потоков обработки, чем количество ядер, которые у вас есть, но для начала просто используйте пул потоков для этого и оптимизируйте позже.
Вам не хватает немного производительности, потому что время, которое вы тратите на чтение первого файла, не используется для какой-либо обработки. Это должно быть незначительным, чтение 100 МБ данных в память не должно занимать более нескольких секунд.