Java_BIO/NIO/AIO

基于NIO的java高性能网络应用的技术研究 http://www.docin.com/p-65119553.html#

(一)      BIO

传统的server/client实现是基于thread per request.

(二)      NIO

最核心的一点就是反应器模式:当有感兴趣的事件发生时,就通知对应的事件处理器去处理事件,如果没有,则不处理。所以使用一个线程做轮询就可以了。

JDK1.4中推出NIO,对高速地块读取、对I/O多路复用和非阻塞进行支持。考虑到流I/O采用阻塞方式进行网络I/P,浪费了大量的时间在等待数据上,所以新的方式需要能提供非阻塞的支持,提高线程的利用率,减少系统在管理线程和线程上下文切换的开销。

 

引起多线程模型的高并发、短连接时性能严重下降,并发性能不高的原因有两个方面;一方面是流I/O技术读写速度慢,另外流I/O技术的阻塞特性将纯种的一部分时间浪费在等待I/O操作上,同时大量地创建、管理、销毁纯种以及上下文切换也使得性能下降和消耗大量系统资源。

一方面需要提高I/O读写的速度,同时采用非阻塞的方式读取,减少等候时间。(NIO,如何理解非阻塞???

一方面需求提高线程的使用效率,减少系统资源的消耗。(线程池

提出的JAVA高性能网络应用开发模型:reactor模型,最后分析建立的新模型基础上的MINA框架。

Reactor模型是一个事件触发模型,当I/O操作准备就绪时,触发读写操作,然后使用线程池进行数据处理,避免了传统的java网络应用开发模型使用一个线程处理一个客户端连接的所有事件,导致在客户端连接增多的时候,性能急剧下降,并发性能不好。

 

 Java_BIO/NIO/AIO_第1张图片Java_BIO/NIO/AIO_第2张图片

 

关键概念:channel,buffer.

缓冲,就是不对stream对象直接进行操作。

通道,就像是流,通过它读取和写入数据。

选择器selectorselectableChannel对象的多路复用器。Selector具有注册事件、监控事件的能力。

能够区分select,poll,epoll方式的差异(用于获取它们所绑定的selectablechannel类型通道)

关于块传输,就是一种传输速度与处理速度的平衡。切块之后,处理迅速加快,而传输速度下降,因为还要切换等。

这是应该04北航研究生的一篇论文报告(好久了,记不清楚),写得还不错,就是JDK1.4的NIO作一个分析,在


参考:

Java学习总结之第十六章 Socket用法详解 http://www.cnblogs.com/jerrychoi/archive/2010/04/15/1712931.html

JavaIO网络系列:http://blog.csdn.net/huang_xw/article/category/1095933


你可能感兴趣的:(Java_BIO/NIO/AIO)