Java IO 底层原理

作者: YQ_1024 | 来源:发表于2019-02-22 22:31 被阅读232次

1.Java的IO操作都是由操作系统来执行的,且发生在内核空间

2.用户空间和内核空间

  • 用户空间就是JVM的堆(进程的内存空间)在这里的程序和指令是访问IO是--被限制的,只能通过内核去访问硬件;

3.整个IO的操作流程如下

IO原理图
  • (1)用户进程发起read调用,操作系统接收到调用后,会创建一个缓冲区,用来存放需要读取的数据,同时向IO设备(设备控制其)发送读取指令(包括读哪些内容)
  • (2)IO硬件接收到指令后,进行读取,并把数据通过DMA(直接存取器)放入内核空间的缓冲区中
  • (3)操作系统将内核缓冲区中的数据拷贝到用户空间的缓存中。调用结束

4.IO的模型

(1)阻塞IO

  • 当硬件设备没有准备好、或者内核缓冲区没有满的时候,就会发生阻塞。例如
    ServerSocker.accept()方法,在没有请求来的时候就会一直阻塞。
    当调用socket.getOutPutStream.write()方法的时候,如果数据量过小。需要调用flush方法,强制将缓存中的数据发送出去


    阻塞IO

(2)NIO(非阻塞IO)

  • 当使用非阻塞IO模型的时候,如果数据不可以,直接返回,当前线程不会等待数据可用,过一会儿再来取数据


    BIO模型

    (3)多路复用IO(selector)
    多路复用IO是基于NIO的,我们通过一个选择器进行轮询,轮询前相关IO会向selector注册。轮询中发现有可用的IO的时候,进行IO处理
    (4)AIO(异步IO)
    可以理解成有一个异步线程来通知我们的IO操作,当数据准备好之后,回调我们的接口。和NIO的区别是:NIO是主动去轮询转台,AIO是被动去调用


    AIO模型
    (5)同步IO和异步IO的区别
    同步IO一定会执行从内核拷贝数据到用户进程,如果NIO模型,当没有数据的时候,是不会阻塞的,但是有数据的时候,拷贝这个动作是会阻塞的。NIO、BIO、多路复用IO都是同步IO

异步IO是指,用户进程发起IO操作之后不用理会了。直到等到操作系统发起一个消息告诉进程,IO完成。接下来会调用我们的方法。

相关文章

  • Java IO 底层原理

    1.Java的IO操作都是由操作系统来执行的,且发生在内核空间 2.用户空间和内核空间 用户空间就是JVM的堆(进...

  • 支付宝阿牛整合Netty+Redis+ZooKeeper「终极版

    这份高并发手册首先,从操作系统的底层原理开始讲解浅显易懂地剖析高并发IO的底层原理,并介绍如何让单体Java应用支...

  • (一)网络基础之 IO 模型

    IO 读写的基础原理 程序进行 IO 的读写,依赖于系统底层的 IO 读写,基本上会用到底层的 read&writ...

  • Java相关

    Java容器底层原理 Java高并发内容 JVM 一. 容器底层原理 ArrayList由数组实现,初始化数组长度...

  • Java NIO

    Java IO 的底层原理 缓冲处理、内核空间与用户空间 缓冲与缓冲的处理方式,是所有I/O操作的基础。术语“输入...

  • iOS AFN底层原理

    AFN底层原理分析 AFNetworking主要是对NSURLSession和NSURLCollection(io...

  • 18. Java IO: File

    想要查看此教程的目录请点击:Java IO教程目录贴地址 Java IO 的File类可以帮助你访问底层的文件系统...

  • 彻底搞懂 IO 底层原理

    武侠小说里有很多的“心法”和“招式”。计算机技术里的“心法”和“招式”呢,我们可以简称为“道”和“术”; **“道...

  • 2020-04-03 Java HashMap的实现原理的文章

    HashMap的扩容机制---resize() HashMap底层实现原理 扩容机制 Java中HashMap的实现原理

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

    转自 [Java][IO]JAVA NIO之浅谈内存映射文件原理与DirectMemory Java类库中的NIO...

网友评论

    本文标题:Java IO 底层原理

    本文链接:https://www.haomeiwen.com/subject/oppyyqtx.html