咱们都晓得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能够服务更多数量的连贯,进步服务器的并发能力。