首页 > 编程语言 > 详细

图解计算机底层IO过程及JavaNIO

时间:2020-12-13 20:24:00      阅读:33      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

CPU 简单理解为 计算机处理运算的单元 (大脑) 

磁盘  简单理解为 绝大多数文件持久化存储的地方,从磁盘中IO寻找东西需要转磁头啊 寻址啊 总之就是很慢

内存  简单理解为 为了方便CPU拿数据给进程用,临时存在这。能存储的数据量很小,但是很快啊,啪的一下就能把数据取出来。

内核空间,用户空间  是操作系统层面的,一般进程只能操作用户空间,需要的时候 必须切换到内核空间才能和内存和磁盘交互。

了解详情 https://www.cnblogs.com/ttaall/p/14029441.html

 

技术分享图片

 

 虚拟内存 顾名思义 并不是不是真实的内存地址,而是通过一种映射 映射到内存的实际物理地址页

各种应用进程在用户空间中

 

JVM进程想从内存中读取数据过程

1. 先去找JVM对应的虚拟内存地址

2. 找到虚拟内存地址对应的内存物理地址页,看看数据是否在

3. 如果数据不在 就缺页中断,去磁盘里找,找到了刷入内存。如果物理内存满了,依据LRU算法,将淘汰的数据刷入磁盘缓冲区

 

JVM想从磁盘中读取 fuxk.txt文本文件时过程

1. 通过磁盘驱动器,从磁盘中寻址找到数据,暂存在磁盘缓冲区

2. 磁盘缓冲区将数据拷贝到内核缓冲区

3. 内核缓冲区将数据拷贝到用户缓冲区

4. 用户缓冲区将数据拷贝到JVM的内存空间

 

优化的痛点和难点就在于 磁盘IO 和网络IO占用了时间和大量的开销

优化 出发点在于: 1.尽量减少磁盘IO和网络IO的次数  2. 尽量减少IO的大小

 

JavaNIO

通过一条Channel通道,直接将JVM空间与用户空间用通道打通,减去了用户空间到JVM拷贝的这一过程

 

内存映射 将用户空间映射到内存物理地址,省去了内核空间拷贝这一步,直接从内存地址取,取不到 缺页中断 去磁盘找,找到直接给用户缓冲区,JVM就直接能读到

 

图解计算机底层IO过程及JavaNIO

原文:https://www.cnblogs.com/ttaall/p/14128788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!