基于IOCP技术的服务器程序设计方法.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于IOCP技术的服务器程序设计方法   摘要:在C/S和B/S模式软件系统中,服务器端程序对客户端请求的响应速度,是衡量软件性能的重要指标。在Windows系统环境下,对利用IOCP技术开发高性能的服务器端程序的设计方法进行了研究。   关键词:IOCP;完成端口;同步;异步;socket   中图分类号:TP316文献标识码:A文章编号:1009-3044(2011)12-2844-02   IOCP Technology-based Server Program Design   YE Yu, FU Yu   (Taizhou Polytechnical Institute, Taizhou 225300, China)   Abstract: In the C / S and B / S mode software system, the speed of the servers response to the clients requests is an important index to measure software performance. In this paper, the writer introduces how to useIOCP technology to design high-performance server in the Windows system environment.   Key words: IOCP; completion port; synchronization; asynchronization; socket   随着计算机的日益普及和互联网的高速发展,上网的用户越来越多,网络应用也日益丰富。对于网络公司而言,随着访问者的增加,公司必然会面临着一个挑战,那就是服务器的性能,而提高性能不外乎两个方面,即软件和硬件,这两面是相辅相成的,本文将介绍能在软件方面提高性能的一种方法。   1 相关基础[1]   Socket:所谓socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。   同步:如图1,同步是指发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。   异步:如图2,异步是指发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。   进程:进程是指在系统中正在运行的一个应用程序。   线程:线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。   2 问题分析   在客户机/服务器模式(Client/Server)软件系统中,假定客户端和服务器之间连接的协议用的是TCP协议,众所周知TCP协议是面向连接的,所以要建立通信,客户端和服务器就要持有对方的连接。可以想象,当客户端越来越多的时候,服务器所要保持的与客户端的连接也越来越多。那么如何管理这些连接呢?下面就详细介绍一种方法。   从图1,图2中可以看出,同步就是干完一件事之后再干另一件事,而异步就是几件事一起做。很显然,异步的方式要好很多,那么如何让服务器的处理方式变成异步的呢?前面提到过线程,线程在逻辑上就是为了实现让计算机同时处理多个任务而提出来的,那么我们就可以用线程来提高效率了,在服务器端可以为每一个客户端的连接创建一个线程,让这个线程专门服务于该客户端的请求。这样在客户端的数量很少的时候看不出什么问题,但是当客户端数量很多的时候,服务器端创建的线程就太多了。虽说创建线程比起创建进程开销要小,但并不是没有开销的;而且线程是不可以无限创建的;当我们创建过多的线程的时候,就会有很多的线程并行地运行在系统中。这样,Windows内核将花费大量的时间在进行线程的上下文切换,反而没有多少时间花在线程运行上了。同时创建新线程的开销比较大,那么我们因该怎么合理的应用线程呢?   进一步分析,现代计算机的处理速度已经很快了,处理客户的请求时间不会太长,那么每一个客户端创建一个线程就没有必要了,那么可以首先创建一定数目的线程,然后让它们处于等待的状态,当客户的请求到来的时候就取出一个等待的线程为客户服务,请求处理完成之后该线程又重新恢复到等待的状态。那么如何合理的组织用户的请求,让多个线程同时为这些请求工作,并且能保证先到的请求先被处理?此时可以想到数据结构中的队列结构,这种数据结构可以满足我们的需要,那么就可以创建一个队列来组织客户端的请求,将所有用户的请求都投递到一个消息队列中去。让多个线程逐一从消息队列中去取出消息并加以处理。这样就可以避免针对每一个用户请求都开线程。不仅减少了线程的资源,也提高了线程的利用率。到目前为止问题已经解决了,下面就要开始

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档