Java IO模型:BIO、NIO、AIO讲解

文章目录

  • IO
    • 首先:什么是IO?
    • 为什么要改进IO?
  • BIO、NIO、AIO
    • BIO
    • NIO
      • NIO实现原理
        • Channel(通道) :
        • Buffer(缓冲区):
        • Selector(选择器) :
    • AIO
    • BIO、NIO、AIO比较
      • NIO 和 BIO 的比较
      • 怎么区别NIO与AIO
      • BIO、NIO、AIO区别举例说明
    • BIO、NIO、AIO适用场景分析:
  • BIO、NIO、AIO代码实战
  • BIO、NIO、AIO相关问题思考:
      • 怎么理解IO是面向流的、阻塞的
      • 怎么理解NIO是面向块的、非阻塞的
      • Netty是什么?

IO

首先:什么是IO?

IO,Input/Output 简写,是指内存和外设之间的数据复制的过程。 输入是指数据从外设复制到内存中, 输出则是指数据从内存复制到外设。

目前,IO 可以通过数据流、序列化和文件系统为系统提供输入和输出

Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入

Java IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。

现在使用NIO的场景越来越多,很多网上的技术框架或多或少用到了NIO技术,譬如Tomcat、Jetty,还有基于nio的网络编程框架Netty。

为什么要改进IO?

这一切都是高并发量“惹的祸”!!!

一个使用传统阻塞I/O的系统,如果还是使用传统的一个请求对应一个线程这种模式,一旦有高并发的大量请求,就会有如下问题:

  1. 线程不够用, 就算使用了线程池复用线程也无济于事;
  2. 阻塞I/O模式下,会有大量的线程被阻塞,一直在等待数据,这个时候的线程被挂起,只能干等,CPU利用率很低,换句话说,系统的吞吐量差;

你可能感兴趣的:(#,Java进阶,Java面试知识点精讲,java,jvm,linux)