nio区别
BIO、NIO和AIO是Java编程语言中用于处理输入输出(IO)操作的三种不同的机制,它们分别代表同步阻塞I/O,同步非阻塞I/O和异步非阻塞I/O。
- BIO(Blocking IO)是最传统的IO模型,也称为同步阻塞IO,它实现的是同步阻塞模型,即服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,并且线程在进行IO操作期间是被阻塞的,无法进行其他任务,在高并发环境下,BIO的性能较差,因为它需要为每个连接创建一个线程,而且线程切换开销较大,不过可以通过线程池机制改善,BIO适合一些简单的、低频的、短连接的通信场景,例如HTTP请求。
- NIO(New IO)是在JDK1.4中引入的,它是基于缓冲区技术的一种新型I/O模型,NIO主要用到的是块,所以NIO的效率要比BIO高很多,NIO支持多路复用技术,可以在单个线程中同时处理多个客户端请求,从而提高了系统的并发能力,NIO适合于大文件传输、网络游戏等需要高效读写大量数据的场景。
- AIO(Asynchronous I/O)是一种异步非阻塞I/O模型,它也是基于缓冲区技术实现的,与NIO类似,AIO也支持多路复用技术,可以在单个线程中同时处理多个客户端请求,但是与NIO不同之处在于:AIO使用了事件驱动机制来完成I/O操作,当某个事件发生时才会触发相应的回调函数执行;而NIO则是通过轮询或者select等方式来检查是否有数据可读或者可写,AIO适合于高并发、高吞吐量的系统环境。