(通信与信息系统专业论文)基于nio的java高性能网络应用的技术研究.pdf_第1页
(通信与信息系统专业论文)基于nio的java高性能网络应用的技术研究.pdf_第2页
(通信与信息系统专业论文)基于nio的java高性能网络应用的技术研究.pdf_第3页
(通信与信息系统专业论文)基于nio的java高性能网络应用的技术研究.pdf_第4页
(通信与信息系统专业论文)基于nio的java高性能网络应用的技术研究.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(通信与信息系统专业论文)基于nio的java高性能网络应用的技术研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京邮电大学硕士论文 基于n10 的ja v a 高性能网络应用的技术研究 摘要 网络技术的不断发展使越来越多的企业、团体和个人加入了 i n t e r n e t ,网络规模日益扩大。在这种状况下,出现了许多高并发、 短连接的应用场景,这需要服务器保持高性能的并发处理机制,迅速 完成对所有并发请求的处理。j a v a 在网络应用开发中使用非常广泛, 但采用j a v a 传统开发模型开发出的网络应用已经难以满足这种需 求,因此需要研究新的j a v a 高性能网络应用技术,提出新的开发模 型。 本文分析了网络应用的基础设施,其中包括计算机网络、操作系 统的i o 系统、客户端一服务器模型,提出网络应用的性能瓶颈主要 在网络i o 。接着研究了基于流i o 技术和多线程技术的传统j a v a 网络应用开发模型,分析出该模型导致j a v a 网络应用性能不高的原 因。 针对传统开发模型的性能瓶颈,本文研究新的高性能网络应用技 术,包括n i o 技术和线程池技术,基于它们构建新的开发模型: r e a c t o r 模型,该模型能给j a v a 网络应用的性能带来较大的提升, 同时也增加了开发的复杂度。针对这个问题,研究了a p a c h e 提供的 m i n a 框架,该框架为开发基于该模型的j a v a 高性能网络应用提供了 便利。 本文设计实现了一些应用程序,并总结出新模型的基本开发流 程。以文件拷贝程序和短信网关应用为例,其中文件拷贝程序用于测 量块读写相对于流读写的速度提升效果,短信网关应用用于测量新模 型对网络应用的性能提升程度。然后对这些应用程序进行性能测试, 对比采集的测试数据,以验证新模型能满足高并发、短连接应用场景 的需求。 通过理论研究和实际应用的检验,说明基于n i o 技术和线程池技 术实现的r e a c t o r 模型,能较好地满足了高并发、短连接这种应用场 景的需求,为开发j a v a 高性能网络应用提供了一种较好的参考模型。 关键词网络应用非阻塞n i or e a c t o rm i n a 北京邮电大学硕士论文 i 己e s e a r c ho nn i o b a s e d 乩v :f m g h p e r f o rm a n c e n e t w o r ka p p l i c a t i o nt e c h n o l o g y a bs t r a c t w i t ht h ed e v e l o p m e n to fn e t w o r kt e c h n o l o g i e s ,m o r ea n dm o r e p e o p l ea n dc o m p a n i e su s ei n t e m e t ,a n dn e t w o r ks c a l ei si n c r e a s i n g s o n e t w o r ka p p l i c a t i o nn e e d sh i g h e rp e r f o r m a n c ew h i c hm e a n si ts h o u l d a f f o r dp a r a l l e lc l i e n tr e q u e s ta n ds e n dr e s p o n s et i m e l ya tt h es i t u a t i o no f h i g hp a r a l l e lc l i e n tr e q u e s ta n ds h o r tc o n n e c t i o n j a v ai su s e di nt h e d e v e l o p m e n to fn e t w o r ka p p l i c a t i o nw i d e l y , b u tj a v an e t w o r ka p p l i c a t i o n d e v e l o p e db yt r a d i t i o nd e v e l o p m e n tp a t t e r n i sh a r dt om e e tt h i s r e q u i r e m e n t ,s ow en e e dt oe x p l o r en e wj a v ah i g hp e r f o r m a n c en e t w o r k a p p l i c a t i o nt e c h n o l o g i e s ,a n dr e s e a r c ho nn e wd e v e l o p m e n tp a t t e r n t h i st h e s i s a n a l y z e s t h ei n f r a s t r u c t u r eo fn e t w o r ka p p l i c a t i o n i n c l u d i n gc o m p u t e rn e t w o r k , i os y s t e m o f o p e r a t i n gs y s t e m , c l i e n t s e r v e rm o d e l ,a n df i n d so u tt h a tt h eb o t t l e n e c ko fn e t w o r k a p p l i c a t i o ni si nt h en e t w o r ki 0 t h e nt h et h e s i sd o e ss o m er e s e a r c ho n t r a d i t i o nd e v e l o p m e n tp a t t e r no fj a v an e t w o r ka p p l i c a t i o nw h i c hi sb a s e d o nt h es t r e a mi 0a n dm u l t i - t h r e a dt e c h n o l o g y , a n df i n do u tt h ef a c t o r so f l o wp e r f o r m a n c e i na l l u s i o nt ot h eb o t t l e n e c k ,t h et h e s i ss t a r t st or e s e a r c ho nn e wh i g h p e r f o r m a n c en e t w o r ka p p l i c a t i o nt e c h n o l o g i e s ,i n c l u d i n gn i oa n dt h r e a d p 0 0 1 t h e nb a s e do nt h e m ,t h i st h e s i sr e a l i z e sn e wd e v e l o p m e n tp a t t e r n : r e a c t o rp a t t e r n i ti m p r o v e st h ep e r f o r m a n c eo f j a v an e t w o r ka p p l i c a t i o n g r e a t l y , b u ti ti sh a r df o rd e v e l o p e r st ou s e t os o l v et h i sp r o b l e m ,t h e t h e s i sr e s e a r c h e so nm i n af r a m e w o r k ,w h i c hc a nh e l pu s e r sd e v e l o p h i g hp e r f o r m a n c en e t w o r ka p p l i c a t i o n sb a s e do nt h en e wp a t t e r ne a s i l y t h et h e s i sd e s i g n sa n di m p l e m e n t ss o m ea p p l i c a t i o n s ,a n ds u m su p t h eb a s i cd e v e l o p m e n tf l o wo fn e wp a t t e r n t of i l ec o p ya p p l i c a t i o na n d i i i 北京邮电大学硕士论文 s h o r tm e s s a g eg a t e w a ya p p l i c a t i o na sa ne x a m p l e ,f i l ec o p ya p p l i c a t i o n a i m st oa s s e s st h ei os p e e dp r o m o t i o no fb l o c kr e a da n dw r i t e s h o r t m e s s a g eg a t e w a ya p p l i c a t i o na i m st oa s s e s st h ep e r f o r m a n c ep r o m o t i o n o fn e t w o r ka p p l i c a t i o nb a s e do nn e wd e v e l o p m e n tp a t t e r n t h e nt h e t h e s i sd o e ss o m ep e r f o r m a n c et e s to nt h e m ,a n dc o m p a r e st h et e s td a t at o v a l i d a t et h e o r e t i c a la n a l y s i s b yt h e o r e t i c a lr e s e a r c ha n dt e s to fp r a c t i c a la p p l i c a t i o n ,t h i st h e s i s c a l lc o n c l u d e 也a tr e a c t o rp a t t e r nb a s e do nn i oa n dt h r e a dp o o lc a nm e e t t h er e q u i r e m e n to ft h es i t u a t i o no fh i 曲p a r a l l e lc l i e n tr e q u e s ta n ds h o r t c o n n e c t i o n ,a n dp r o v i d eag o o dr e f e r e n c ep a t t e r nt od e v e l o ph i g h p e r f o r m a n c en e t w o r ka p p l i c a t i o n k e yw o r d s :n e t w o r ka p p l i c a t i o nn o n - b l o c k i n gn i or e a c t o rm i n a i v 独创性( 或创新性) 声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他 教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均已在论文中作了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处, 本人签名:鲎塑毯 本人承担一切相关责任。 日期:婴曼至基! 兰璺 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即: 研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保 留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借 阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它 复制手段保存、汇编学位论文。( 保密的学位论文在解密后遵守此规定) 保密论文注释:本学位论文属于保密在一年解密后适用本授权书。非保密论 文注释:本学位论文不属于保密范围,适用本授权书。 本人签名:宝童童是 日期:缒至瘟! 兰旦 导师签名: 日期:迦乒互l 北京邮电大学硕士论文 1 1 研究背景 第一章绪论 2 1 世纪的重要特征是数字化、网络化、信息化,它是一个以网络为核心的 信息时代【l 】。网络现在已经成为信息社会的命脉和发展知识经济的重要基础,对 社会生活的许多方面以及对社会经济的发展已经产生了不可估量的影响。网络主 要包括电信网络、有线电视网络和计算机网络,其中发展最快并起到核心作用的 是计算机网络。 以因特网为代表的计算机网络无处不在,因此计算机网络应用更加是触及到 社会的方方面面。我们享受网络应用提供的各种服务:使用浏览器访问w e b 页 面,浏览最新的新闻,收发电子邮件;使用即时通讯工具和家人朋友沟通联系; 使用网上银行支付购买的商品;使用p 2 p 下载工具高速下载需要的资源。 随着对网络应用的需求增加,上网人数也随之迅猛增长,因此对网络应用的 性能要求也越来越高。在许多情况下,一个网络应用在网上发布之后,使用的用 户是数以万计的,这时出现的状况是数百甚至上千等并发访问请求在等待它的处 理,并且这些请求是短连接的。这些情况的普遍出现,需要较高的并发处理能力 和快速的响应速度,对网络应用的性能提出了非常大的挑战。 1 1 1j a v a 网络应用现状 j a v a 是一种主流的网络应用编程语言,大部分的网络应用采用j a v a 语言进 行开发。j a v a 拥有优秀的平台无关性【2 】,其编译后产生的字节码能够顺利地运行 在异构的操作系统上,非常符合网络应用的需求;另一方面j a v a 简化了网络应 用的编写工作量,提高了开发的效率。j a v a 让您可以玩网络游戏、与世界各地的 人f r j 印g p 天,对于企业内部网应用程序和其他电子商务解决方案而言,它也是不可 缺少的一部分。 j a v a 网络应用使用非常广泛,但采用传统开发模式开发的网络应用已经不能 满足人们对网络应用越来越高的性能要求。在客户端请求并发量不高的情况下, 传统开发模式能很好地满足人们的需求,但在高并发、短连接的情况下,网络应 用的性能大幅下降,甚至出现崩溃的情况。因此j a v a 网络应用需要采用新的技 术,以实现高并发的处理机制,满足高性能的需求。 北京邮电大学硕士论文 1 1 2 关键技术背景 网络应用的种类非常多,但现代网络应用绝大部份基于客户端服务器模型 【3 1 。在这种模型当中,一个应用是由一个服务器程序和一个或者多个客户端软件 构成。服务器程序一般运行在高性能的服务器上,管理着一定的资源,而客户端 程序一般运行在相对便宜的个人计算机上。客户端发起请求,服务器在接收到请 求信息后,进行处理并给客户端发送响应信息,完成对客户端提供服务。因特网 上最流行的客户端服务器模型是w e b ,w e b 服务器( 如a p a c h e ) 响应客户端( 如 f i r e f o x ) 的请求。 套接字( s o c k e t ) 是客户端和服务器进行通信的接口【3 1 。它隐藏复杂的t c p i p 协议族以及更底层的通信实现。客户端只要向它的套接字写入任意比特的数据, 服务器就可以从连接套接字中按发送顺序接收到所有的数据。这些数据是以流的 方式展现的,分为输入流和输出流,从套接字获取的是输入流,写入套接字的是 输出流。j a v a 中提供t c p 和u d p 套接字,以实现这两种协议的通信。 在套接字建立好通信通道以后,网络应用需要进行并发处理,以同时为多个 客户端提供服务。现代操作系统提供了三种创建并发程序的方法:进程、i o 多 路复用( v om u l t i p l e x i n g ) 以及线程【3 1 。其中最简单的方式是使用进程的方式来 进行并发处理,在父进程中接受客户端连接请求,然后创建一个新的子进程来为 新客户端提供服务。采用i o 多路复用方式的基本思路是使用s e l e c t 函数,该函 数会被一直阻塞,直到监听到有一个或者多个i 0 事件发生后,才将控制权返回 给应用程序。第三种方式是采用线程,它和多进程的执行模式非常相似,主线程 不断的监听客户端的连接请求,当有客户端连接到来时,创建一个新的线程来处 理该连接。 与c p u 和内存相比,甚至与磁盘相比,网络都很慢。针对于这种情况,提 高网络应用的关键是提高网络i o 能力。传统的j a v a 网络应用采用缓冲和多线 程的方式进行并发处理。如果不需要很高的性能,这种方式能起到很好的效果。 但创建线程以及线程间切换的开销不容忽视。例如,每个线程需要大约1 m 内存。 线程管理的开销会极大的降低系统性能。如果一个线程能负责多个连接,选取一 个准备好接收数据的连接,尽快地用连接可以管理的尽可能多的数据进行填充, 然后转向下一个准备好的连接,这样速度会更快。同时这种想法也是可以实现的, 可能用于高吞吐量服务器的每一种现代操作系统都支持这样的非阻塞i o 。 在这种情况下,j d k l 4 中开始推出n i o 技术。n i o ( n e wi 0 ) 技术对高速 的块读取、对v o 多路复用和非阻塞进行支持。拥有这些特性后,为开发高性能 的j a v a 网络应用提供了底层平台。 2 北京邮电大学硕士论文 1 2 研究目的和意义 传统的j a v a 网络应用的使用范围非常广泛,但采用传统的开发模式对网络 i 0 的处理能力不高,已经不能满足现在人们对高并发的需求,成为高性能网络 应用的性能瓶颈。传统的网络i o 处理方式采用流i o 和多线程的并发网络i 0 处理方式,效率不高。面向流的i 0 系统一次一个字节地处理数据,这种处理方 式具有优雅性和简单性,但不利的是读写速度相当慢;同时流是同步的,这种阻 塞式的调用也极大的降低了网络i 0 的速度。一个客户端连接分配一个线程进行 处理,浪费了许多时间在等待数据上面,同时系统管理线程也占用了大量资源, 降低了系统的性能。 本文研究的目的就是针对这种情况,探索一种新的开发j a v a 高性能网络应 用的开发模型。基于传统流i 0 读写速度慢,寻找一种新的、速度更快的读写方 式。考虑到流i 0 采用阻塞方式进行网络i o ,浪费了大量的时间在等待数据上, 所以新的方式需要能提供非阻塞的支持,这样能提高线程的利用率,减少系统在 管理线程和线程上下文切换的开销。 n i o 技术结合线程池技术,构建出的r e a c t o r 模型能较好的满足上面的需求。 n i o 技术提供一个面向块的i 0 系统,可以实现高速i o 而无需编写自定义的本 机代码。同时n i o 提供非阻塞的i 0 机制,消除了等待数据的时间,这样使得 一个线程在相同的时间内能处理更多客户端连接,提高了线程的利用率。非阻塞 式调用和面向数据块的操作结合起来,能较大地提高网络应用的性能。线程池技 术能减少网络应用创建线程时所需的时间,重复利用池中的线程,能减少系统的 开销,同时提高网络应用的性能。 探索出一种j a v a 高性能网络应用的开发模式,具有比较深远的意义。一方 面可以为许许多多正在从事j a v a 网络应用开发的开发者提供一个参考,解决他 们在开发中遇到的并发性能难题。另外一方面j a v a 网络应用触及人们生活的方 方面面,提高这些网络应用的性能,促进这些网络应用的服务质量,能更好的为 社会服务。 1 3 作者在硕士期间所做工作 在研究生期间主要从事通信与网络方面相关的研究与工作,主要参与的项 目和研究课题有: 空中下载平台管理系统的研究 移动身份认证平台的研究 移动秘宝平台的研究 北京邮电大学硕士论文 空中下载平台作为一个网络应用,为手机用户提供o t a 菜单下载、移动设 备管理和手机功能升级等服务。管理系统是空中下载平台的业务支撑系统,用于 确保业务系统的正常运行。主要承担的工作包括:开发中国联通o t a 系统总部 管理平台,其中包括地区o t a 通信模块、s p 业务管理模块。其中地区通信模块 作为该网络应用的客户端,采用w e bs e r v i c e 技术和地区o t a 管理平台进行通信。 s p 业务管理模块采用j a v a 中的j s p s e r v l e t 技术开发w e b 应用,为客户端提供服 务。取得的成果包括:全面研究了应用层协议s o a p 和h t r p :熟练使用j a v a 开发一些网络应用,例如w e b 应用;理解了o t a 系统的整体架构,开发出的模 块已经应用在中国联通o t a 系统。 移动身份认证平台也是j a v a 网络应用,使用存储p k i 私钥的s i m 卡唯一识 别一个用户的身份,可以用于电子商务。主要承担的工作包括:开发证书管理模 块、用户管理模块、手机网上购物演示系统。证书管理模块负责o p e n l d a p 中 证书的管理;用户管理模块负责系统用户的管理;手机网上购物演示系统构建了 一个完整的手机购物系统,作为移动身份认证平台的一个应用演示。所取得的成 果包括:研究使用j a v a 开发w a p 网站;研究使用j a v a 传统i o 读写证书文件: 对网络应用中的加密技术p k i 有了基础了认识。 移动秘宝作为j a v a 网络应用,为全国网游玩家提供的一项增值服务,使用 动态口令确保玩家账号的安全。主要承担的工作包括:研究动态密码技术;开发 数据同步模块;研究短信网关应用模块。取得的成果有:开发出数据同步模块; 对网络应用程序客户端服务端之间的通信实现有全面的认识;认识到传统j a v a 网络应用性能的瓶颈。 通过这些课题的研究,使自己不仅熟悉开发多种j a v a 网络应用,其中最主 要的就是w e b 应用,同时对j a v a 网络应用的底层实现有了一定的认识,确认传 统j a v a 网络应用的性能瓶颈主要在其网络i o 速度,传统的面向流的i o 方式不 仅速度缓慢,而且只支持阻塞的方式进行i o 操作,并不能满足高并发的需求, 因此需要使用新的i o 技术来开发j a v a 高性能网络应用,于是对n i o 技术和线 程池技术做了一些研究。 1 4 论文结构 本论文分为六章,章节安排如下: 第一章是绪论部分,该部分讲述了本论文的研究背景与研究目的。研究背景 中首先简介了j a v a 网络应用程序的现状,以及导致这种状况出现的技术背景。 最后提出使用n i o 技术来构建j a v a 高性能网络应用的课题。 第二章是j a v a 网络应用技术,在本章中首先介绍了j a v a 网络应用的基础设 4 北京邮电大学硕士论文 施,包括计算机网络、操作系统的i o 系统、客户端服务器模型和一些关键概 念,然后研究流i o 技术和多线程技术,在此基础上介绍j a v a 网络应用的传统 开发模型,并分析引起网络应用性能低下的原因,并针对原因提出解决问题的思 路。 第三章是j a v a 高性能网络应用技术,主要研究了开发j a v a 高性能网络应用 的两个技术:n i o 技术和线程池,然后讨论基于这两者的r e a c t o r 模型,最后研 究了基于前面技术的m i n a 框架,它为开发高性能和高可用性的网络应用程序 提供了极大的便利。 第四章是实际应用示例,以设计实现两个应用程序为例,通过具体程序的设 计,说明基于新模型的开发流程,并为基于新的高性能网络应用技术和传统技术 的网络应用的对比做好准备。其中文件拷贝程序用于测量块读写相对于流读写的 速度提升效果;短信网关应用用于测量新的开发模型对网络应用的性能提升程 度。 第五章是性能测试,对第四章的实际应用进行性能测试,记录测试结果,并 用图表的形式表现出来,以对比采用新的高性能网络应用技术和传统技术对网络 应用的性能提升情况,从而验证新技术在实际应用中对j a v a 高性能网络应用理 论分析上的预期,为j a v a 高性能网络应用的开发提供一种参考模型。 第六章是总结,首先总结了本文所完成的工作,然后对j a v a 高性能网络应 用技术进行了一些展望。 5 北京邮电大学硕士论文 第二章j a v a 传统网络应用技术 本章首先分析网络应用的一些基础设施,然后研究建立在这些基础设施之上 的j a v a 传统网络应用技术,包括流f o 技术、多线程技术,最后分析使用这些 技术的传统开发模型。 2 1 基础设施 j a v a 网络应用是用j a v a 语言开发的在计算机网络上使用的应用程序,它的 f o 操作建立在操作系统的f o 系统之上,它的开发一般都基于客户端服务器模 型,使用套接字s o c k e t 作为客户端和服务端的通信接口,屏蔽了应用层以下的 底层通信实现。 2 1 1 计算机网络 网络应用是计算机网络存在的理由。所谓计算机网络,就是把分布在不同地 理区域的计算机与专门的外部设备用通信线路互联成的一个规模大、功能强的网 络系统,从而使众多的计算机可以通过网络应用方便地相互传递信息,共享硬件、 软件和数据信息等资源。 计算机网络是一个非常复杂的系统,采用“分层 可以将复杂的问题,转化 为若干较小的局部问题,而这些问题比较容易研究和处理。国际标准化组织提出 一个标准框架:开发系统互连基本参考模型o s i r m ( o p s y s t e m s i i l t 即c o 衄e c t i o nr e f e r e l l c em o d e l ) ,简称o s i 。但事实上的国际标准是t c p i p , t c p 口是一个四层体系结构( 如图2 1 ) ,包含应用层、传输层、网际层和网络 接口麒1 1 。 6 北京邮电大学硕士论文 应用层 ( 各种应用层协议如 t e l n e t , 兀e s m t p 等) 。 传输层( t c p 或u d p ) 网际层( 口) 。 网络接口层 图2 - 1t c p i p 四层结构图 协议是控制对等实体间进行通信的规则的集合。在协议的控制下,两个对等 实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下 面一层所提供的服务。 2 1 2 操作系统的i 0 系统 输入输出( i o ) 是主存和外部设备( 例如磁盘、终端和网络) 之间拷贝数 据的过程。操作系统的i o 系统【4 】的作用是管理和控制i o 操作和i o 设备,为 应用程序提供接口。 i o 设备包括很多设备,绝大多数都属于存储设备( 磁盘、磁带) 、传输设备 ( 网卡、调制解调器) 和人机交互设备( 屏幕、键盘、鼠标) 。这些设备存在许 多差别,但都使用控制器通过总线进行交互。主机和控制器通过轮询或中断进行 i o 操作。 显示器处理器 厂、 ,“罅、 i 高速缓存 思域 ii ”。 图形控制器i o 桥接口 l 主存储器 9 缓彩缀够妒z 影笏彩移缓缀戮缀缀绷群黝臻缀缓缀獭黝缓缓渤弱缓缀绷黝彩钐彩缀弼彩戮缀戮缀黝猫穗缀黼黼瓣籀獭鳜霸溯 i 磁盘控制器控制器扩展槽网络适配器 一 ( 磁盘 ) 键盘 鼠标网络 图计算机设备图 7 北京邮电大学硕士论文 针对网络f o 的性能和访问特点与磁盘i o 相比有很大差别,绝大多数操作 系统提供的网络f o 接口和磁盘f o 接口不一样,许多操作系统提供的接口是网 络套接字接口,比如u n i x 和w i n d o w $ n t 。 套接字接口的系统调用可以让网络应用创建一个套接字,连接本地套接字和 远程地址,监听要与本地套接字相连的远程网络应用,通过连接发送和接收数据。 为支持服务器的实现,套接字接口还提供了s e l e c t 函数,以管理一组套接字。调 用s e l e c t 可以得知哪个套接字已有接收数据需要处理,哪个套接字已有空间可以 接收数据以便发送。使用s e l e c t 就不必再使用轮询和忙等待来处理网络i o 。 操作系统提供两种模式的网络f o 操作:异步和同步。其中最重要的两种模 型有s e l e c t 模型和异步f o 模型。关于异步f o 模型,在w i n d o w s 当中的实现是 i o c p ,l i n u x 中网络模块的异步i o 一直没有进入稳定内核版本,不过在s e l e c t 模型当中e p o l l 的出现提供了很好的解决方案,改进了传统的s e l e :c t p o l l 函数具 有的一些无法忍受的缺点。 2 1 3 客户端一服务器模型 绝大部分网络应用是基于客户端服务器模型的。根据这个模型,一个应用 由一个服务器和一个或者多个客户端组成。服务器程序一般运行在高性能的服务 器上,管理着一定的资源,为客户端提供某种服务,而客户端程序一般运行在相 对便宜的个人计算机上【3 1 。例如i n t e r n e t 上最流行的客户端服务器系统是w e b , w 曲服务器( 如a p a c h e ) 需要w 曲客户端( 如f i r e f o x ) 的请求,数据存储在 w e b 服务器上,在请求时发送给客户端。 客户端服务器模型中的基本操作是事务( 如图2 3 ) 。一个事务是由四步组 成: 第一步:当客户端需要服务时,向服务器发送一个请求( r e q u e s t ) ,发起一 个事务。例如当w e b 浏览器需要一个文件时,它就发送一个请求给服务器。 第二步:服务器接收到一个请求后,解释它,并以适当的方式获取相应的资 源,处理请求。 第三步:服务器给客户端发送一个响应( r e s p o n s e ) ,并等待下一个请求。 例如,w e b 服务器将文件发送回客户端。 第四步:客户端收到响应并处理它。例如w e b 浏览器接收到来自服务器的 响应后,在屏幕上显示响应的内容。 北京邮电大学硕士论文 4 处理响应 3 发送响应 图2 - 3i o 设备图 综合上面的分析,可以总结出一个网络应用程序的硬件和软件架构( 如图 2 4 ) ,客户端主机中的客户端应用程序通过系统调用接口调用操作系统内核代 码,然后通过网络适配器将请求传送给网络另外一端的服务器主机,通过网络适 配器等硬件、系统内核到达服务器,然后服务器顺着同一条路径给客户端应用程 序发送响应信息。 客户端主机服务器主机 系统调用接口 硬件接口( 中断) 2 2 4 关键概念 客户端用户代码服务器 b n m j n l l 8 0 q f t c p 内核代码 t c p m 壬- 网络适配器i 硬件 网络适配器 i; 图2 - 4i 0 网络应用的硬件和软件架构图 在i o 操作中,有几个关键的概念需要理解:阻塞i o 、非阻塞i o 、i o 复 用、同步i o 、异步i o 5 1 。 阻塞i o ( b l o c k i n gi o ) :在请求i o 操作中,应用进程会一直等到i o 操作 完成,才会继续往下执行。应用进程在输入操作中,需等到数据从内核拷贝到应 用进程的缓冲区,然后返回;在输出操作中,需等到数据能从应用进程的缓存区 拷贝到内核进行输出,然后才能返回。 非阻塞i o ( n o n b l o c k i n gi o ) :应用进程在i o 操作中,不能进行数据操作 9 北京邮电大学硕士论文 时立即返回;在能进行数据操作时,等到i o 操作完成后返回。输入操作等待数 据从内核拷贝到应用程序缓冲区后返回,输出操作等待数据从应用程序缓冲区写 入内核后返回。 i o 复用( i o m u l t i p l e x i n g ) :是一种预先告知内核的能力,使得内核一旦发 现应用进程指定的一个或多个i o 条件就绪,内核就通知进程。它通过s e l e c t 模 式进行支持,实现的方式有s e l e c t 、p o l l 、e p o l l 等,首先通过这三种方式中的一 种进行检查,一旦一个或多个i o 条件就绪,内核就通知应用进程进行需要的i o 操作。 同步i 0 ( s y s n c h r o n o u si o ) :该操作会引起请求进程阻塞,直到i o 操作完 成。 异步i o ( a s y s n c h r o n o u si o ) :该操作不会引起请求进程被阻塞。 2 2 流i o 技术 j a v a 语言的i o 建立在流( s t r e a m ) 之上。i o 类库中经常使用流这个抽象 概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端 对象。“流 屏蔽了实际的i o 设备中处理数据的细节。 2 2 1 输入流和输出流 j a v a 的i o 类库分为输入和输出两个部分,与输入有关的所有类都应该从 i n p u t s t r e a m 6 】继承( 如图2 5 ) ,而与输出有关的所有类都应该从o u t p u t s t r e a m 6 l 继承( 如图2 6 ) 。 i n p u t s t r e a m a u d i o i n p u t s t r e a m b y t e a r r a y i n p u t s t r e a m f i l e i n p u t s t r e a m p i p e d l n p u t s t r e a m f i l t e r i n p u t s t r e a m o b j e c t i n p u t s t r e a m s t r i n g b u f f e r i n p u t s t r e a m s e q u e n c e i n p u t s t r e a m 图2 - 5i n p u t s t r e a m 继承层次图 l o 北京邮电大学硕士论文 图2 - 6o u t p u t s t r e a m 继承层次图 i n p u t s t r e a m 的作用是用来表示那些从不同数据源产生输入的类。如图2 - 5 所示,这些数据源包括: 1 ) 字节数组 2 ) s t r i n g 对象 3 ) 文件 4 ) “管道”,工作方式和实际管道相似,即从一端输入,从另一端输出 5 ) 一个由其它种类的流组成的序列,以便我们可以将它们收集合并到一个 流内 6 ) 其他数据源,如i n t e r n e t 连接等 其中子类f i l t e r i n p u t s t r e a m 把属性或者有用的接口与输入流连接了起来。 i n p u t s t r e a m 有一个抽象方法: a b s t r a c ti n tr e a d0 该方法将读取一个字节,并将其返回。如果已经读到了输入源的末尾,将返 回一1 具体输入流类的设计者应用覆盖这个方法以提供具体的功能实现。 o u t p u t s t r e a m 决定了输出所要去的目标:字节数组、文件或管道。其中子 类f i l t e r o u t p u t s t r e a m 把属性或者有用的接口与输出流连接了起来。 同样地,o u t p u t s t r e a m 有一个抽象方法: a b s t r a c ti n tw r i t e ( i n tb ) 该方法将一个字节写到指定的输出位置。 2 2 2 阅读器和书写器 j a v a1 1 对基本的i o 流类库进行了重大修改。初次看到r e a d e r ( 阅读器) 和w r i t e r ( 书写器) 【7 】时,可能会以为是用来替代i n p u t s t r e a r n 和o u t p u t s t r e a m , 北京邮电大学硕士论文 但实际上并非如此。i n p u t s t r e a m 和o u t p u t s 仃e a m 在面向字节形式的i o 中仍然极 具价值,r e a d e r 和w r i t e r 则提供兼容u n i c o d e 和面向字符的i o 功能。 当必须把来自于“字节 层次结构中的类和“字符一层次结构中的类结合起 来使用时,要用到“适配器“( a d a p t e r ) 类:i n p u t s t r e a m r e a d e r 可以把i n p u t s t r e a m 转换为r e a d e r ,而o u t p u t s t r e a m w r i t e r 可以把o u t p u t s t r e a m 转换为w r i t e r 。 设计r e a d e r 和w r i t e r 继承层次结构主要是为了国际化。i o 流继承层次结构 仅支持8 位字节流,并不能很好地处理1 6 位的u n i c o d e 字符。由于u n i c o d e 用 于字符国际化( j a v a 本身的c h a r 也是1 6 位的u n i c o d e ) ,所以添加r e a d e r 和w r i t e r 继承层次结构就是为了支持u n i c o d e 。 2 2 3 技术特征 流i o 技术是面向字节的。输入流每次生产一个字节的数据,即从数据源读 取一个字节的数据。输出流每次消耗一个字节的数据,即每次写入输出流一个字 节的数据。这种方式进行读写的速度会比较慢。 流i o 是阻塞调用的。不论是r e a d 方法还是w r i t e 方法都能阻塞( b l o c k ) 一 个线程直到字节被真正地读取或者写入。这意味着如果流不能立即被读取或者写 入字节( 通常是因为网络连接繁忙) ,j a v a 就会挂起这个调用的线程,处于等待 的状态。这样就能够把c p u 让给其它线程去做有用的工作,同时这个方法将一 直等待,直到流再次可用为止。 2 3 多线程技术 多线程技术使用多个线程并发的执行任务。多线程技术可以极大的提高j a v a 网络应用的性能,因为不同的线程可以在同一个进程内执行,能够最大限度的利 用c p u 时间。当然,多线程服务器需要程序员处理单线程程序中不存在的问题, 例如安全问题、生命周期问题以及线程的同步机制。 2 3 1 线程模型 线程是轻量级的进程,拥有自己的栈空吲2 1 。j a v a 定义了两种创建线程的方 式: 1 1 继承t h r e a d 类 2 1 实现r u n n a b l e 接口 两种方式中最重要的方法都是r u n 方法。在编写自己的线程程序时,需要对 1 2 北京邮电大学硕士论文 m n o 方法进行覆盖,将需要将线程需要做的所有工作放到这个方法当中,同时这 些工作是与别的线程并行运行的,这就产生了资源竞争和同步问题。 线程在生命周期中有四种状态【8 】,他们可以相互转换( 如图2 7 ) : 1 ) 新建状态:线程已被创建,但尚未执行( s t a r t 方法尚未被调用) 。 2 ) 可执行状态:线程已可执行,但不一定在执行。c p u 时间随时可能被 分配给该线程。 3 ) 死亡状态:正常情况下r u n 方法返回使得线程死亡,调用s t o p 方法或 d e s t r o y 方法亦有同样效果,前者产生异常,后者强制终止,不会释放 锁。 4 ) 被阻塞状态:线程需要等待一个事件时,进入该状态。 厂1 、 i 糟鲫t n el i :_ j 图2 - 7 线程生命周期状态转换图 其中需要进一步解释的是被阻塞和可执行状态之间的转换。当发生下面一种 情况时,线程就进入被阻塞状态【9 】: 1 ) 线程通过调用s l e e p 方法进入睡眠状态。 2 ) 线程调用一个在i 0 上阻塞的操作,即该操作在输入输出操作完成之前 不会返回到它的调用者。 3 ) 线程试图得到一个锁,而该锁正被其它线程所持有。 通过以下途径中的一种,线程可以从被阻塞的状态回到可运行的状态【9 】: 1 ) 线程被置于睡眠状态,且已经经过了指定的时间。 北京邮电大学硕士论文 2 ) 线程正在等待i o 操作完成,且该操作已经完成。 3 ) 线程正在等待另一个线程所持有的锁,且另一个线程已经释放了该锁的 所有权。 4 ) 线程正在等待某个触发条件,且另外一个线程发出了信号条件表明条件 已经发生了变化。 5 ) 线程已被挂起,且有人调用了它的r e s u m e 方法。 2 3 2 同步和消息 当两个或多个线程需要访问同一共享资源时,需要某种方式确保资源在某一 时刻只被一个线程使用,这个方法称为同步( s y n c h r o n i z a t i o n ) 。j a v a 提供了对 同步操作独特的、语言级支持。 同步的关键是监控器( m o n i t o r ) 的概念,也称为信号量( s e m a p h o n e ) 。监控器 是作为互斥排它锁( m u t e x ) 使用的一个对象:在给定的时刻,只可能有一个线程 使用该监控器。当一个线程获得了锁,也就是进入了监控器,所有其它试图进入 锁定的监控器的线程将被暂停,直到第一个线程退出监控器。 j a v a 中可以有两种方式来实现同步,它们都使用了关键字s y n c h r o n i z e d 9 1 。 一个是使用同步方法一有s y n c h r o n i z e d 关键字修饰的方法。j a v a 所有对象都有 和自己关联的隐式监控器,如果要进入一个对象的监控器,只需调用 s y n c h r o n i z e d 关键字修饰的方法。另外一个是s y n c h r o n i z e d 语句,对需要同步 的对象,放入一个同步块当中。 在将程序划分为独立的线程之后,需要定义线程间通信的方法。j a v a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论