0
点赞
收藏
分享

微信扫一扫

axios 进阶

钎探穗 2023-08-31 阅读 44
niojavaunix

IO简介

摘抄了下维基百科对IO的定义,Input/Output,输入和输出,通常指数据在存储器或者其他周边设备之间的输出和输入,输入是系统接收到信号或者数据,输出则是从系统发送的信号或数据。

Java IO 读写原理

Java中文件IO是Java层面上的应用开发,Socket是linux底层开发,都属于输入Input和输出Output的处理,简称IO读写。在原理上和处理流过程一致,区别仅仅是参数的不同。

对程序进行IO操作,基本上会用到read&write两大系统调用。可能不同的操作系统,名称不一样,功能却是一样的。

read系统调用,是将数据从内核缓冲区中复制到进程缓冲区,而write系统调用,是将数据从进程缓冲区复制到内核缓冲区。这两个系统调用,都不会负责数据在内核缓冲区和磁盘之间的交换。底层的读写,是由操作系统kernel内核完成的。

关于用户进程缓冲区和内核缓冲区的概念,可以参考一下这篇文档, 这边简述一下这两个概念:

下图描述了每个进程4G地址空间的分配情况,具体内容请参考Linux 内核空间与用户空间
在这里插入图片描述

我们画个简图描述一下操作系统进行IO读写的过程是如何的
在这里插入图片描述

1、运行的java程序可能需要从磁盘中读取一些文件信息

2、调用java语言的api发起这次请求

3、api底层从用户缓冲区中去读取数据

4、如果用户缓冲区中有值,直接读取数据,如果没有缓存,则会发起系统read&write,去检查内核缓冲区是否有值

5、内核缓冲区没有值,业务进程就会挂起等待

6、内核缓冲区会去IO设备里面去读取数据,直到有数据能被读取

举报

相关推荐

axios

0 条评论