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