Java NIO基础一 NIO概念

我们都知道IO包括磁盘IO和网络IO,相对于CPU的速度,IO性能差了好几个数量级,应用程序的瓶颈主要在IO这块。

NIO的出现就是为了优化IO性能,JDK1.4之前IO都是使用流来进行IO操作,流操作都是单向的,读写都是阻塞的。JDK1.4版本添加了NIO,NIO实际上是基于操作系统的新IO特性(select、poll、epoll)。

NIO在Java中叫New IO,多路复用IO。NIO的特性是系统在进行IO操作时不会阻塞(在select()和缓冲区拷贝时还是会阻塞),可以去干一些其他事情,你可以随时过来询问一下IO是否就绪。比如:你去菜市场买菜,你准备买一只鸭子,你可以和老板说你要一只鸭子,但是鸭子还没有杀好,这时你可以和老板说,你先杀好,我过一会在来拿,这时你可以去买其他菜,待会在过来。这样的好处就是避免了等待(阻塞),让费系统资源。

传统的网络IO服务器实现
一个线程用来接收新的连接accept,每次有新的连接过来后新开一个线程来处理这个连接的IO,或者使用连接池。这样一个线程在连接断开之前只能一直服务于这个连接,实际上连接不是非常活跃,这中间会导致极大的资源浪费。而且操作系统有线程数量的限制,无法无限的开启新线程来处理高并发的连接数。

NIO网络服务器实现
相对于传统IO,Nio能够高效的利用线程资源,因为IO非阻塞特性,一个线程可以处理多个连接,这样相同数量的连接池对比传统IO可以服务更多数量的连接,提高服务器的并发能力。

image.png

你可能感兴趣的