описание проблемы
Мне нужно передавать большие файлы с диска. Предположим, что файлы больше, чем поместится в памяти. Кроме того, предположим, что я выполняю некоторые вычисления с данными, и результат достаточно мал, чтобы поместиться в памяти. В качестве гипотетического примера предположим, что мне нужно вычислить md5sum файла размером 200 ГБ, и мне нужно сделать это с гарантиями того, сколько оперативной памяти будет использовано.
В итоге:
- Должно быть постоянное пространство
- Как можно быстрее
- Предположим, очень большие файлы
- Результат умещается в памяти
Вопрос
Каковы самые быстрые способы чтения/потока данных из файла с использованием постоянного пространства?
Идеи, которые у меня были
Если бы файл был достаточно мал, чтобы поместиться в памяти, то mmap
в системах POSIX был бы очень быстрым, к сожалению, здесь это не так. Есть ли какое-либо преимущество в производительности при использовании mmap
с небольшим размером буфера для буферизации последовательных фрагментов файла? Будут ли накладные расходы системных вызовов на перемещение буфера mmap
вниз по файлу преобладать над какими-либо преимуществами или мне следует использовать фиксированный буфер, в который я считываю с помощью fread
?