完成端口模型的使用与分析

完成端口模型的使用与分析

ID:44358170

大小:46.00 KB

页数:7页

时间:2019-10-21

完成端口模型的使用与分析_第1页
完成端口模型的使用与分析_第2页
完成端口模型的使用与分析_第3页
完成端口模型的使用与分析_第4页
完成端口模型的使用与分析_第5页
资源描述:

《完成端口模型的使用与分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、完成端口模型的使用与分析摘要:完成端口是一种复杂的Win32内核对象。应用程序可以用完成端口管理线程池为大量的异步i/o请求提供服务,而不必为每个i/o请求分别创建服务线程。完成端口模型用于开发服务器应用程序,以提供优良的伸缩性和获得最好的系统性能。本文构建了一个基本的网络服务器程序框架,对完成端口模型的用法进行阐述与分析。关键词:完成端口;线程池;套接字theusageandanalysisofcompletionportmodelzhoupeng,huangcan,jiangnan(unit91550ofpla,dalian116023,li

2、aoning)[abstract]completionportisacomplicatedWin32kernelobject・applicationscanprovideserviceforalargenumberofasynchronousi/orequestsbyusingcompletionporttomanagethreadpool,andneedn,tcreateservicethreadsforeachi/orequest・completionportmodelisusedtodevelopserverapplicationtopro

3、videexcellentscalabilityandgetthebestsystemperformance・thispaperconstructedabasicnetworkserverapplicationframework,expatiatedandanalyzedtheusageofcompletionportmode1.[keywords]completionport;threadpool;socket0引言在Win32中,套接字是一个指向传输提供者的句柄[1]。winsock提供了锁定和非锁定两种套接字模式,以决定winsock函数随

4、套接字调用时的行为。锁定模式虽然容易使用,但对于建立连接的多个套接字,或数据收发量不均,时间不规律的情况,却难以管理;而非锁定模式则难以处理winsock函数调用时可能会收到的wsaewoulclblock错误。为了解决套接字模式存在的限制,winsock捉供了一些套接字模型,帮助应用程序通过异步方式,一次对一个或多个套接字上进行的i/o操作加以管理。这些模型包括:select(选择)、wsaasyncselect(异步选择)、wsaeventselect(事件选择)、overlappedi/o(重叠i/o)和completionport(完成端

5、口)。相对于其它套接字模型,完成端口模型是最复杂的、也是伸缩性最好的一种模型。当应用程序作为服务器为大量套接字的i/o请求提供服务时,使用这种模型会获得最好的系统性能。许多高性能服务器,如apache、iis等,都使用了完成端口模型的技术[2]。因此,掌握完成端口模型的用法和工作机制是非常必要的。1完成端口模型的使用和分析下面将构建一个基本的网络服务器程序框架,对使用完成端口模型管理大量套接字的方法加以论述。程序框架的构建步骤如下:(1)创建一个完成端口;(2)创建线程池;(3)创建套接字监听客户连接请求;(4)为完成端口关联连接返冋的套接字;(

6、5)在建立的连接上进行i/o操作。1.1创建完成端口要创建完成端口,应调用createiocompletionport函数:handlecreateiocompletionport(handlehfile,handlehexistingcompletionport,dworddwcomplctionkey,dworddwnumberofconcurrentthreads);该函数完成两种不同的工作:(1)创建一个完成端口;(2)把一个设备同完成端口相关联。如果只创建一个完成端口,可以这样调用函数:handiehioep=createiocompl

7、etionport(invalidhandlc_valuc,null,0,0);参数dwnumberofconcurrentthreads定义了完成端口能够同时运行的最多线程数。如果该参数为0,完成端口缺省允许的并发线程数目是计算机上的epu数目。这样,每个CPU可以运行一个线程,以避免多余的线程上下文切换,节省CPU的周期。如果处理一个客户请求需要一段比较长的时间,为了捉高应用程序的伸缩性,可能需要增大该值。1.2创建线程池成功创建完成端口对象之后,就需要创建一个线程池来处理客户请求。虽然创建线程时系统资源的开销比较小,但远非可以忽略不计。在程

8、序初始化吋创建一个线程池,可以避免运行吋创建线程。如果这些线程在应用程序执行期间是空闲的,程序的性能就能进一步提髙。线程池中的线程数量应

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。