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

Java_BIO/NIO/AIO

2014-09-10 17:18 337 查看
原文:http://blog.csdn.net/nbrremix/article/details/7352057

(一) 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作一个分析,在

http://www.docin.com/p-65119553.html#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: