美文网首页
--java-IO模型

--java-IO模型

作者: with_dream | 来源:发表于2022-05-10 01:24 被阅读0次

    一、概述

    IO的方式通常分为同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO

    同步和异步 是针对应用程序和内核的处理方式不同。同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪;异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知。
    阻塞和非阻塞 是针对于进程在读写数据时的处理方式不同。当一个线程在读/写时,当数据完全被读取/写入或者数据没有准备好时,阻塞方式下线程在读取或者写入时将一直等待;非阻塞方式下,线程可以做其他任务。
    所以, 按照以上角度,I/O模型可以分为:同步阻塞的BIO,同步多路复用非阻塞的NIO,异步阻塞的伪异步IO,异步非阻塞的AIO。

    在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O(NIO),而Proactor运用于异步I/O操作(BIO)。 Java共支持3种网络编程模型/IO模式:BIO、NIO、AIO。

    二、BIO

    在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行。

    阻塞式IO需要单独的线程取处理一个请求和读写,所以需要使用多线程去处理。当请求过多时导致线程过多,比较消耗内存

    socket建立原理
    https://www.csdn.net/tags/MtTaMg5sMDMyMzE1LWJsb2cO0O0O.html

    三、NIO

    https://www.jianshu.com/p/ccb85c693774

    四、AIO

    五、总结

    BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

    NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

    AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

    参考

    https://blog.csdn.net/lixinkuan328/article/details/114156483

    相关文章

      网友评论

          本文标题:--java-IO模型

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