繁体   English   中英

文件系统I / O缓冲区

[英]File system I/O buffer

考虑以下伪代码片段以从文件末尾读取文件

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' 这是否大部分由文件系统缓冲所补偿,还是我应该始终一次读取较大的块?

答案取决于您的操作系统。 大多数现代操作系统都使用系统页面大小的倍数作为文件缓冲区。 这样,4KB(在大多数系统上最常见的页面大小)可能是磁盘缓存所容纳的最小单位。 更大的问题是您的代码正在进行大量的冗余系统调用,这很昂贵。 如果您担心性能,可以考虑将需要的数据mmap()缓冲,然后直接从缓冲区中引用该数据;如果系统支持,则调用mmap()并直接访问映射的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM