博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存映射文件机制处理大文件
阅读量:3610 次
发布时间:2019-05-21

本文共 641 字,大约阅读时间需要 2 分钟。

 

分类: 
 
318人阅读 
(0) 
 

先说结论:使用内存映射文件来处理大文件可以提高效率。 

为什么呢?

我们先来看看如果不使用内存映射文件的处理流程是怎样的,首先我们得先读出磁盘文件的内容到内存中,然后修改,最后回写到磁盘上。第一步读磁盘文件是要经过一次系统调用的,它首先将文件内容从磁盘拷贝到内核空间的一个缓冲区,然后再将这些数据拷贝到用户空间,实际上是两次数据拷贝。第三步回写也一样也要经过两次数据拷贝。

所以我们基本上会有四次数据的拷贝了,因为大文件数据量很大,几十GB甚至更大,所以拷贝的开销是非常大的。

而内存映射文件是操作系统的提供的一种机制,可以减少这种不必要的数据拷贝,从而提高效率。它由mmap()将文件直接映射到用户空间,mmap()并没有进行数据拷贝,真正的数据拷贝是在缺页中断处理时进行的,由于mmap()将文件直接映射到用户空间,所以中断处理函数根据这个映射关系,直接将文件从硬盘拷贝到用户空间,所以只进行了一次数据拷贝 ,比read进行两次数据拷贝要好上一倍,因此,内存映射的效率要比read/write效率高。

一般来说,read write操作可以满足大多数文件操作的要求,但是对于某些特殊应用领域所需要的几十GB甚至更大的存储,这种通常的文件处理方法进行处理显然是行不通的。目前,对于上述大文件的操作一般是以内存映射文件的方式来加以处理的。

原文:

作者:hongchangfirst

hongchangfirst的主页:

转载地址:http://istzn.baihongyu.com/

你可能感兴趣的文章
公司升级ERP管理系统的三大诱因
查看>>
Android四大应用组件(一)——Activity
查看>>
Spring5框架——IOC(基于xml配置文件)(一)
查看>>
spring5框架——IOC(基于注解)&AOP(二)
查看>>
SpringMVC框架(一)
查看>>
SpringMVC框架(二)
查看>>
IDEA整合SSM框架
查看>>
Spring注解驱动开发(一)
查看>>
Spring注解驱动开发(二)
查看>>
SpringSecurity&thyemleaf命名空间约束地址
查看>>
字符串(二)
查看>>
字符串(三)
查看>>
字符串练习
查看>>
正则表达式
查看>>
Java中集合的输出方式
查看>>
数组排序的四种方法
查看>>
Java学习笔记
查看>>
JDBC技术(一)
查看>>
JDBC技术(三)——预防SQL注入攻击
查看>>
JDBC技术(五)——JDBC工具类
查看>>