考虑以下伪代码片段从其结尾读取文件
while (1) {
seek(fd, offset, SEEK_END)
read(fd, buf, n)
// process the buffer, break on EOF...
offset -= n
}
现在n
可以在1 byte
之间变化,让我们说1kB
。
对于非常小的n
s,对文件系统的影响有多大?这是通过文件系统缓冲大部分来补偿的,还是我应该一次读取更大的块?
答案 0 :(得分:3)
答案取决于您的操作系统。大多数现代操作系统使用系统页面大小的倍数作为文件缓冲区。因此,4KB(大多数系统上最常见的页面大小)可能是磁盘缓存所占的最小单位。更大的问题是您的代码正在进行大量冗余系统调用,而这些调用很昂贵。如果您担心性能问题,可以考虑在大块中缓冲您认为需要的数据,然后直接从缓冲区引用该数据,或者如果您的系统支持并直接访问映射文件,则调用mmap()
。 p>