您的位置:首页 > 编程语言 > Java开发

Java_BIO/NIO/AIO

2011-06-07 18:17 323 查看

基于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网络应用开发模型使用一个线程处理一个客户端连接的所有事件,导致在客户端连接增多的时候,性能急剧下降,并发性能不好。





关键概念:channel,buffer.
缓冲,就是不对stream对象直接进行操作。
通道,就像是流,通过它读取和写入数据。
选择器selector是selectableChannel对象的多路复用器。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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: