BIO,NIO,AIO的区别
BIO(Blocking I/O),NIO(Non-blocking I/O), AIO(Asynchronous I/O) (异步)是java中用于处理不同I/O操作的不同模型。
1. 概念
- BIO (Blocking I/O)
BIO(Blocking I/O)BIO指的是同步阻塞进行I/O操作。
- 当执行到IO操作的代码时,线程会一直阻塞(无论是在等待操作还是进行读写操作),直到IO操作完成以后才会执行后续的代码。
- NIO(Non-blocking I/O) 同步非阻塞模型
NIO引入了Channel和Buffer的概念。
- Channel是双向的,可以读也可以写。
- 而Buffer是负责传输的缓冲区。
- 使用NIO时线程不再阻塞了而是采取轮训的方式进行IO操作,即一个线程可以进行多个IO操作,
- 可以利用while循环,在里面不断地询问多个IO是否准备好了,某一个IO如果准备好了就进行IO操作,如果没有就会询问下一个IO。
- AIO(Asynchronous I/O)异步非阻塞模型。
AIO是在NIO基础上进一步发展的
- 使用AIO时,该线程开启另一个线程,将IO操作交给另一个线程执行,然后执行后续的代码。
- 当另一个线程执行完IO操作以后会通知该线程,通常采用回调函数的方式来执行AIO。
2. 使用场景
- BIO 对于连接数较小且固定的情况,BIO是可以接受的,但在高并发的环境中,性能可能受影响
- NIO适用于连接数较多且连接时间较短的场景,能够通过单一线程管理多个连接
- AIO 适用于处理大量并发连接,且连接时间较长的场景。

浙公网安备 33010602011771号