繁体   English   中英

何时使用mmap与何时使用缓存层进行读写?

[英]When to use mmap vs when to use read and write with cache layer?

调查数据库存储引擎时,似乎大多数都使用mmap来保持。 但是,是否存在这样的情况:使用读取和写入操作将数据写入缓存层并将二进制文件写入磁盘?

我想了解的是mmap和unmmap与读写之间有什么区别? 以及何时使用一个或另一个?

如果可以使用mmap() ,通常是更好的方法。 使用read()/write() ,必须为每个操作执行系统调用(尽管stdio库通过用户模式缓冲将其最小化),并且这些上下文切换非常昂贵。 即使文件块位于缓冲区高速缓存中,您也必须首先切换到内核进行检查。 此外,内核需要将数据从内核缓冲区复制到调用者的内存。

另一方面,当您使用mmap() ,只需在首次打开并映射文件时执行系统调用。 从那时起,虚拟内存子系统使应用程序内存与文件内容保持同步。 仅当您尝试访问尚未从磁盘分页的文件块时,才需要上下文切换,而不是尝试读取或写入的文件的每个部分。 当您修改映射的内存时,它会延迟地写回到文件中。

对于大多数实际应用程序,应使用最适合应用程序逻辑的方法。 两种方法之间的性能差异仅在时间紧迫的应用中才有意义。 在实现库时,您无法说出客户端应用程序的需求,因此,您当然会尽力降低所有性能。 但是对于许多其他应用程序, 过早的优化是万恶之源

暂无
暂无

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

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