BIO,NIO,AIO的区别

BIO(Blocking I/O),NIO(Non-blocking I/O), AIO(Asynchronous I/O) (异步)是java中用于处理不同I/O操作的不同模型。

1. 概念

  1. BIO (Blocking I/O)
    BIO(Blocking I/O)BIO指的是同步阻塞进行I/O操作。
  • 当执行到IO操作的代码时,线程会一直阻塞(无论是在等待操作还是进行读写操作),直到IO操作完成以后才会执行后续的代码。
  1. NIO(Non-blocking I/O) 同步非阻塞模型
    NIO引入了Channel和Buffer的概念。
  • Channel是双向的,可以读也可以写。
  • 而Buffer是负责传输的缓冲区。
  • 使用NIO时线程不再阻塞了而是采取轮训的方式进行IO操作,即一个线程可以进行多个IO操作,
  • 可以利用while循环,在里面不断地询问多个IO是否准备好了,某一个IO如果准备好了就进行IO操作,如果没有就会询问下一个IO。
  1. AIO(Asynchronous I/O)异步非阻塞模型。
    AIO是在NIO基础上进一步发展的
  • 使用AIO时,该线程开启另一个线程,将IO操作交给另一个线程执行,然后执行后续的代码。
  • 当另一个线程执行完IO操作以后会通知该线程,通常采用回调函数的方式来执行AIO。

2. 使用场景

  1. BIO 对于连接数较小且固定的情况,BIO是可以接受的,但在高并发的环境中,性能可能受影响
  2. NIO适用于连接数较多且连接时间较短的场景,能够通过单一线程管理多个连接
  3. AIO 适用于处理大量并发连接,且连接时间较长的场景。
posted @ 2025-05-17 21:28  kuki'  阅读(112)  评论(0)    收藏  举报