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

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

用户态和内核态

先不管态这个字,其实就是两个进程,

1.用户程序进程
2.操作系统内核进程

数据复制

按位置划分

1.磁盘——操作系统(内存)
2.操作系统——用户程序进程(内存)

磁盘io

磁盘速度慢,尽量把更多的数据弄到内存去。

内存

内存速度快。不过,内存分两块:

1.操作系统内存
2.用户程序内存

缓冲区

也分两块:

1.操作系统缓冲区内存
2.用户程序进程缓冲区内存

首先,缓冲区都是内存,操作系统缓冲区就是与磁盘通信,所以也叫操作系统io缓冲区。目的是把更多的数据放到内存,减少磁盘io次数。

用户进程缓冲区,是因为用户程序调用操作系统API属于系统调用,比较耗费资源,所以为了减少系统调用次数,用户进程也有缓冲区。目的其实和操作系统的缓冲区的作用一样,都是为了减少慢操作的次数,把更多的数据放到内存,从而提高速度。

架构图

内存映射文件技术

顾名思义,就是把磁盘文件和用户进程缓冲器内存直接建立联系,不经过内核的缓冲区。

就是忽略操作系统内核的缓冲区,经过内核的时候,数据直接到用户进程缓冲区。流程和之前是一样的,只是内核直接把数据放到了用户进程的缓冲区,没有经过自己的缓冲区。所以流程是如下:

磁盘文件——内核:系统调用——用户进程缓冲器内存

总而言之,其他都一样,就是少了内核的缓冲区。

内存映射文件技术在消息中间件RocketMQ的应用

消息数据读写的时候,采用了内存映射文件技术。

为什么不取消内核缓冲区,全部采用内存映射文件技术?

1.内存映射文件技术里的内存是不同用户进程共享,数据不安全

2.内存大小有限

参考

JAVA NIO之浅谈内存映射文件原理与DirectMemory

转载于:https://juejin.im/post/5ce26a876fb9a07eb94f5dd0

你可能感兴趣的文章
初识shell脚本
查看>>
uva 11401思维+预处理
查看>>
9. Palindrome Number
查看>>
android-远程图片获取和本地缓存
查看>>
PHP Smarty变量调节器
查看>>
shell中的字符串操作
查看>>
Node.js 函数
查看>>
Oracle CheckPoint进程
查看>>
仿知乎注册验证码
查看>>
物联网笔记1
查看>>
代码练习
查看>>
webpack构建Vue项目引入jQ时发生“'$' is defined but never used”的处理
查看>>
2. java变量
查看>>
王爽汇编语言 实验11
查看>>
JS和C#分别防注入代码
查看>>
Django模板语言
查看>>
闪屏,default
查看>>
适合0基础的web开发系列教程-文本格式标签汇总
查看>>
jQuery-对Radio/CheckBox的操作集合
查看>>
webpack的build的时候时间长处理方案
查看>>