Вы, действительно, совершенно облажались.
Посмотрим ... 300 * 4 МБ = 1,2 ГБ. Это соответствует вашему бюджету памяти? Если это так, непременно прочитайте их все в память. Но, чтобы ускорить процесс, вы можете попробовать следующее:
Чтение 512 КБ каждого файла, последовательно. Вы можете попробовать читать от 2 до 8 одновременно - возможно, через Futures
, и посмотреть, насколько хорошо оно масштабируется. В зависимости от вашей системы ввода / вывода, вы можете получить некоторую скорость, читая несколько файлов одновременно, но я не ожидаю, что она будет сильно масштабироваться. ЭКСПЕРИМЕНТ! ЭТАЛОН!
Обработка этих 512 КБ с использованием Futures
.
Вернитесь к шагу 1, если вы не закончили с файлами.
Получить результат обратно из обработки Futures
.
На шаге 1, ограничивая параллельные чтения, вы избегаете перегрузки подсистемы ввода-вывода. Нажмите на нее как можно сильнее, возможно, чуть меньше, но определенно не больше.
Не читая все файлы на шаге 1, вы тратите некоторое время на чтение этих файлов, выполняя полезную работу процессора. Вы также можете поэкспериментировать с уменьшением числа байтов, считанных на шаге 1.