- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
非阻塞输入输出在信息交换系统中应用
非阻塞输入输出在信息交换系统中应用
摘 要:非阻塞输入输出NIO是提高I/0操作效率的重要突破,成为高性能信息交换系统中重要的技术。介绍了传统I/0操作方式和非阻塞输入输出NIO的区别,并通过实例对使用NIO的服务与传统I/0服务的性能进行了比较,得出使用NIO达到了提高服务能力的目的。??
关键词:非阻塞输入输出;输入输出;服务器??
中图分类号:TP311.52 文献标识码:A 文章编号:1672-7800(2011)05-0135-02?お?
1 传统I/O操作方式??
在使用NIO之前,有必要了解传统的I/O操作的方式。??
网络服务的底层都离不开对socket的操作。它们都有一个共同的结构:①Read request;②Decode request;③Process service;④Encode reply;⑤Send reply。??
经典的网络服务的设计如图1,在每个线程中完成对数据的处理。??
但这种模式在用户负载增加时,由于每个handler对资源的锁定,造成handler之间互相等待的情况,性能将下降非常快。??
再以网络应用为例,传统方式需要监听一个ServerSocket,接受请求的连接为其提供服务(服务通常包括了处理请求并发送响应),图2是服务器的生命周期图,其中标有粗黑线条的部分表明会发生I/O阻塞。??
可以分析创建服务器的每个具体步骤。首先创建ServerSocket??
ServerSocket server=new ServerSocket(10000);??
然后接受新的连接请求 ??
Socket newConnection=server.accept();??
对于accept方法的调用将造成阻塞,直到ServerSocket接受到一个连接请求为止。一旦连接请求被接受,服务器可以读客户socket中的请求。??
这样的操作有两个问题,首先BufferedReader类的readLine()方法在其缓冲区未满时会造成线程阻塞,只有一定数据填满了缓冲区或者客户关闭了套接字,方法才会返回。其次,它回产生大量的垃圾,BufferedReader创建了缓冲区来从客户套接字读入数据,但是同样创建了一些字符串存储这些数据。虽然BufferedReader内部提供了StringBuffer处理这一问题,但是所有的String很快变成了垃圾需要回收。
类似地,读写操作被阻塞而且向流中一次写入一个字符会造成效率低下,所以应该使用缓冲区,但是一旦使用缓冲,流又会产生更多的垃圾。??
很显然,要保持数据处理的流畅,事件驱动机制是最好的解决办法,当有事件发生时,会触动handler,然后开始数据的处理。??
2 Java NIO非阻塞技术??
Java NIO非阻塞应用通常适用于这一方面,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻地等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。??
Java NIO非阻塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不阻塞了。??
Reactor模式类似于AWT中的Event处理:??
Reactor模式参与者:①Reactor 负责响应I/O事件,一旦发生,广播发送给相应的Handler去处理,这类似于AWT的thread;②Handler 是负责非阻塞行为,类似于AWT ActionListeners;同时负责将handlers与event事件绑定。??
Java的NIO为reactor模式提供了实现的基础机制,它的Selector当发现某个channel有数据时,会通过SlectorKey来告知我们,在此我们实现事件和handler的绑定。??
Selector这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有事件发生时,它会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册过的socketchannel,然后,我们从这个Channel中读取数据,放心,包准能够读到,接着我们可以处理这些数据。??
Selector内部原理实际是在做一个对所注册
您可能关注的文档
最近下载
- 人工挖孔桩有限空间作业专项施工方案-2024.docx
- 2025年社区工作者公共基础知识与社区工作相关知识试卷.docx VIP
- 2025-2026年中国机械加工行业发展现状分析报告(目录) .pdf VIP
- 《GMP物料管理培训》课件.ppt VIP
- 2016款上汽名爵MG3_汽车使用手册用户操作图解驾驶指南车主车辆说明书电子版.pdf VIP
- 1000 Basic English Words—1000核心单词全4册单词带音标.pdf VIP
- 2025年社区工作者招聘考试公共基础知识(社区工作相关知识)题库.docx VIP
- 急性肺水肿患者应急预案及流程.pptx VIP
- 2025年社区工作者招聘考试(公共基础知识+社区工作相关知识)题库.docx VIP
- 智能控制技术专业人才培养方案(高职).pdf VIP
原创力文档


文档评论(0)