在传统的I/O系统中,都是基于byte和流的 ,相应的i/o都是阻塞型的,所以服务器程序也采用阻塞型i/o进行读写操作,而且线程也会阻塞,系统中会有大量用于同客户端进行交互的线程,每个线程都需要较多的系统资源(内存,栈,寄存器),在不同的线程之间切换上下文是个很费时的操作,频繁的线程切换会造成系统性能的急速下降。
nio特性:
针对传统的i/o,java nio通信机制采用了基于buffer,channel,selector的机制。
buffer(缓冲区):Buffer是个抽象类,每个基本类型都有Buffer的封装,比如说IntBuffer,他们都重写了Buffer 的方法,都包含一个数组作为当然ByteBuffer是个例外,他比较特殊,由于channel是直接对ByteBuffer进行读写的。
Channel(通道):Channel是一个接口,功能类似于传统io中的stream,但是通道具有两面性,即可以读,也可以写。
Selector(选择器):负责已经注册的Socket通道,提供channel的状态信息,控制各类channel协同工作。
这三个重要的抽象定义了非阻塞套接字的工具,非阻塞io作为REACTOR模式的实现,实际上实现了事件发生,自我激活,主动通知机制。selector是实现所有非阻塞技术的主要实现,当一些有意义的事发生在通道上时,选择器便会通知应用程序处理请求。通知的方式是创建一个selectionKey的一个实例,每个关键词都保持着原有的channel和请求的类型。
nio工作机制:
nio基本思想是有事我通知你,你再去做你的事情,没事件你可以去做其他的事,nio的主线程只有一个,不像多线程,所以使得jvm更加高效,使得jvm处理数据时更加高效,在服务器中使用nio,其实就是用通过网络驱动模型实现的,我们只要将想要关注的事注册到selector,用这一个单线程来管理大量的事件,更好的利用了系统的资源,从而减少了维护系统io需要的开销,大幅度的提高了系统的性能。nio做的事很简单,就是实现的事件的收集和分发。
打个比方,就像在一辆公交车上,原来是司机到了一站问一下,谁要下车,每个人都得保持时刻清醒,而现在的nio就相当于让每个乘客都睡觉,在睡觉前将所要到的地点告诉乘务员,乘务员在到达目的站后会唤醒乘客。
总结:
好处有两点:第一个线程不在通信时阻塞了。
第二点,Selector能够处理大量的链接,从而降低了服务器的开销。
分享到:
相关推荐
NIO入门.chm NIO入门.chm NIO入门.chm
java nio 入门,来自于IBM中文站
IBM Java文档库 NIO 入门
java nio入门学习,两个pdfjava nio入门学习,两个pdf
这是用于JAVA NIO入门教程的源码,直接看也能学到不少哦
NIO 的创建目的是为了让 Java 程序员可以实现高速 I/O 而无需编写自定义的本机代码。NIO 将最耗时的 I/O 操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。
新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的。NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本机代码就...
这个是NIO入门练习的源代码,涵盖了NIO的方方面面,感觉很不错,分享给大家,共同学习。
java NIO入门适合入门j
NIO 入门 JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的...
不错的学习nio的资料,其中包含示例代码。轻松学习nio.
NULL 博文链接:https://hujiqiang.iteye.com/blog/642805
javaNIO入门(良好排版格式).pdf
java NIO 入门,看了就会开发,java菜鸟们,走起!
回味Java基础之NIO!!!
NIO 入门笔记 Reactor模式概念介绍
java_NIO_入门(良好排版格式).pdf,关于JAVA的IO编程方面的知识,比较深入的介绍了NIO的知识
java_NIO_入门教程,非常详细,排版比较好,含代码,知识点讲解
java nio入门知识 java nio详细介绍总结