完成端口模型的使用与分析.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文档。上传文档
查看更多
完成端口模型的使用与分析 摘 要:完成端口是一种复杂的win32内核对象。应用程序可以用完成端口管理线程池为大量的异步i/o请求提供服务,而不必为每个i/o请求分别创建服务线程。完成端口模型用于开发服务器应用程序,以提供优良的伸缩性和获得最好的系统性能。本文构建了一个基本的网络服务器程序框架,对完成端口模型的用法进行阐述与分析。 关键词:完成端口;线程池;套接字 the usage and analysis of completion port model zhou peng,huang can,jiang nan(unit 91550 of pla, dalian 116023, liaoning) 【abstract】completion port is a complicated win32 kernel object. applications can provide service for a large number of asynchronous i/o requests by using completion port to manage thread pool, and needn’t create service threads for each i/o request. completion port model is used to develop server application to provide excellent scalability and get the best system performance. this paper constructed a basic network server application framework, expatiated and analyzed the usage of completion port model. 【key words】completion port; thread pool; socket 0 引言 在win32中,套接字是一个指向传输提供者的句柄[1]。winsock提供了锁定和非锁定两种套接字模式,以决定winsock函数随套接字调用时的行为。锁定模式虽然容易使用,但对于建立连接的多个套接字,或数据收发量不均,时间不规律的情况,却难以管理;而非锁定模式则难以处理winsock函数调用时可能会收到的wsaewouldblock错误。 为了解决套接字模式存在的限制,winsock提供了一些套接字模型,帮助应用程序通过异步方式,一次对一个或多个套接字上进行的i/o操作加以管理。这些模型包括:select(选择)、wsaasyncselect(异步选择)、wsaeventselect(事件选择)、overlapped i/o(重叠i/o)和completion port(完成端口)。 相对于其它套接字模型,完成端口模型是最复杂的、也是伸缩性最好的一种模型。当应用程序作为服务器为大量套接字的i/o请求提供服务时,使用这种模型会获得最好的系统性能。许多高性能服务器,如apache、iis等,都使用了完成端口模型的技术[2]。因此,掌握完成端口模型的用法和工作机制是非常必要的。 1 完成端口模型的使用和分析 下面将构建一个基本的网络服务器程序框架,对使用完成端口模型管理大量套接字的方法加以论述。程序框架的构建步骤如下: (1)创建一个完成端口; (2)创建线程池; (3)创建套接字监听客户连接请求; (4)为完成端口关联连接返回的套接字; (5)在建立的连接上进行i/o操作。 1.1 创建完成端口 要创建完成端口,应调用createiocompletionport函数:handle createiocompletionport(handle hfile, handle hexistingcompletionport, dword dwcompletionkey, dword dwnumberofconcurrentthreads);该函数完成两种不同的工作:(1)创建一个完成端口;(2)把一个设备同完成端口相关联。如果只创建一个完成端口,可以这样调用函数: handle hiocp = createiocompletionport(invalid_ handle_value, null, 0, 0); 参数dwnumberofconcurrentthreads定义了完成端口能够同时运行的最多线程数。如果该参数为0,完成端口缺省允许的并发线程数目是计算机上的cpu数目。这样,每个 cpu可以运行一个线程,以避免多余的线程上下文切换,节省cpu的周期。如果处理一个客户请求需要一段比较长的时间,为了提高应用程序的伸缩性,可能需要增大

文档评论(0)

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

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

1亿VIP精品文档

相关文档