问题描述
我需要从磁盘流式传输大文件。假设文件大于内存容量。此外,假设我正在对数据进行一些计算并且结果足够小以适合内存。作为一个假设的例子,假设我需要计算一个 200GB 文件的 md5sum,并且我需要保证将使用多少内存。
总之:
- 需要恒定的空间
- 尽可能快
- 假设非常大的文件
- 结果适合记忆
问题
使用常量空间从文件中读取/流式传输数据的最快方法是什么?
我有过的想法
如果文件足够小以适合内存,那么mmap
在 POSIX 系统上会非常快,不幸的是这里不是这种情况。mmap
使用较小的缓冲区大小来缓冲文件的连续块是否有任何性能优势?将缓冲区向下移动文件的系统调用开销会mmap
占主导地位吗?或者我应该使用我读入的固定缓冲区fread
吗?