BIO
Blocking IO 同步阻塞型IO。当系统进行IO读写的时候,会阻塞,直到IO读写完毕。比如调用系统Read后,需要将内核空间的数据读取到用户空间。需要等待内核空间 数据准备,数据就绪,拷贝数据,线程一直处于阻塞状态,直到拷贝数据完成。如下图:
BIO这种方式是一个连接对应着一个线程,会造成线程阻塞。当连接数目少的时候还能支撑住,当连接数一多会导致阻塞时间过程,影响系统的性能。因此阻塞型IO只是用于少量连接的情况。
为了使用大量连接的情况,又设计了非阻塞型IO-NIO模型。
NIO
NIO同步非阻塞型IO,系统在进行读写的过程中不会阻塞,系统性能更高。非阻塞型IO采用了多路复用的原理,将多个连接注册到一个selector上,通过一个线程就能管理多个连接。通过selector轮询的方式看那个连接上有请求,对该请求分配一个线程。这样就大大提高的效率。
非阻塞型IO特别适用于连接数目多,且连接时间较短的常用,比如聊天服务器。
AIO
AIO为异步IO。异步IO是基于事件和回调机制来实现的。当应用程序发起IO请求后,立马返回,可以进行其他操作。当系统IO完成后,会通知该线程,该线程继续执行之后的操作。
目前AIO应用不是很广泛。
总结
参考:
https://javaguide.cn/java/io/io-model.html#aio-asynchronous-i-o
https://blog.csdn.net/Shangxingya/article/details/110489318