我所知道的是 mmap 可以将进程的虚拟内存页面映射到磁盘上文件的页面。我们可以在程序中写入和读取内存,它会反射(reflect)在文件的内容中。
这种机制如何使文件的顺序读取(可能还有处理)比常规读取系统调用更快?它如何使搜索(如果文件已排序,则为二进制搜索)更快?
我从多个来源了解到 mmap 确实实现了我所说的,但我找不到任何详细说明。
最佳答案
由于限制因素是从磁盘读取,它可能不会更快...使用这两种方法,您都可以配置预读来加速顺序读取,这可能是您能做的最好的事情。
mmap()
与读取文件相比,读取文件还有其他优点:您不必关心内存管理。如果文件非常大(超过了您希望在进程中使用的内存),您将不得不自己管理保留文件的哪些部分以及丢弃哪些部分。在 mmap 的情况下,操作系统的常规内存管理例程决定文件的哪些部分保留在内存中,哪些在内存争用的情况下丢弃,密切关注整个系统的内存使用情况,而且不仅仅是您的流程。如果您决定,某些部分必须始终保留在内存中,您可以 mlock()
那些。
但在一般情况下,我没有看到很大的性能提升。
关于linux - mmap如何使大文件处理更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192571/