温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MMAP文件加速读写小技巧是什么

发布时间:2022-01-18 14:31:26 来源:亿速云 阅读:183 作者:柒染 栏目:互联网科技

MMAP文件加速读写小技巧是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

进程读写数据时除了使用read和write,还可以使用mmap进行文件映射,区别如下图所示:

MMAP文件加速读写小技巧是什么

             

可以看到,磁盘文件加载到内存后,还需要执行一次拷贝操作。

如果使用mmap,则是磁盘文件直接加载到用户空间,也就是上图中深黄色部分,进程可以通过指针直接操作文件。

粗看起来mmap少了一次拷贝,理论上比read要快。但是,调用mmap后并不会真实将文件加载到内存,因此在读写过程中(特别是大文件)会触发大量中断,导致性能降低,就算使用madvise调用加速参数都没有用。这里提供一个小方法,对文件每一页读取一下首字节:

MMAP文件加速读写小技巧是什么

上面的代码我们使用两个数据完全相同8M文件,看看执行预加载和不执行预加载后的表现:

MMAP文件加速读写小技巧是什么

可以看到执行预加载调用速度明显比不执行要快。使用madvise加速有没有效果呢?看一下:

MMAP文件加速读写小技巧是什么

没有效果,还是执行预加载调用速度明显比不执行要快。程序两次读文件时间略有偏差,是因为cpu与内存本身的电气特性。

鲁棒性

当使用mmap进行共享映射时,多个进程可以操作同一文件,典型场景就是使用vim编辑文件,然后使用cat查看文件,如下图:

MMAP文件加速读写小技巧是什么

这个时候就有竞争场景了,进程1和2分别只能看见自己的私有虚拟地址,需要调用者自己实现锁机制,详情可以参考写时拷贝机制。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI