- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于完成端口模型网络服务器性能优化探究
基于完成端口模型网络服务器性能优化探究 摘 要 完成端口模型(IOCP)在各种网络并发I/O 处理的模型中,是效率最高的。为进一步提高完成端口的执行性能,可以对模型处理流程中的各步骤作进一步优化。连接池技术可以实现SOCKET的重复利用。对象池技术改善完成端口模型对内存资源的利用效率,WSARecv函数采用零字节投递处理重叠I/O,可降低操作系统资源开销
关键词 IOCP 完成端口 连接池 对象池
中图分类号:TP393.05 文献标识码:A DOI:10.16400/j.cnki.kjdkx.2016.12.016
Abstract The completion port model (IOCP) is the most efficient model for concurrent I/O processing in a variety of network. In order to further improve the performance of the completion port, we can further optimize the steps in the process of model processing. Connection pool technology can be used to achieve the reuse of SOCKET. Object pool technology to improve the completion port model of memory resource utilization efficiency, WSARecv function using zero byte delivery processing overlap I/O, can reduce the operating system resource overhead.
Keywords IOCP; Completion port; connection pool; object pool
0 引言
完成端口(IOCP)?ν?络服务器管理多个连接套接字具有非常高的效率,有优秀的系统延展性。与普通多线程模型处理并发连接相比较。完成端口的优势在于:其一,普通线程模型对于用户连接是一对一的,一个连接对应一个线程。如果当前在线连接达到千以上,则系统同时运行千个以上的线程,系统运行速度会大幅下降,因为线程创建、退出需要耗费大量系统资源,线程数量太多,线程间切换耗费的CPU时间片也越多。每个线程运行所分到的CPU时间片太少,线程运行速度显著变慢。 针对多线程模型缺陷,线程池模型(Thread Pool)可以减少建立、退出线程的系统资源开销。但是对于并发连接高峰时段, 线程池模型并不能减少并发运行线程数量。完成端口则在线程池模型的基础上做进一步的优化,是目前效率最高,系统资源占用最小的线程池模型。并发线程太多的原因是服务于每一个连接的线程不能快速退出。每个连接在请求和应答过程中,数据传输可能由于网络或者用户操作等原因造成传输延迟,只要数据传输全过程未完成,线程即不能退出。完成端口把接收和回传数据两个步骤分解到多个线程中单独完成,因此每一个线程在系统中持续的时间变短,同时在线的线程数量大幅减少。其二,完成端口对数据处理采用异步模式,数据的接收和发送由系统进行,WSARecv,WSASend 函数调用后立即返回。系统处理数据结束后再发消息通知。因此可以同时响应多个连接的请求 。本文探讨了进一步优化完成端口I/O管理的几种方法
1 完成端口建立过程
建立基于完成端口的网络服务程序的过程是:(1)创建完成端口对象,调用函数 CreateIoCompletionPort(__in HANDLE FileHandle,__in_opt HANDLE ExistingCompletionPort,__in ULONG_PTR CompletionKey,__in DWORD NumberOfConcurrentThreads);该函数返回完成端口句柄。函数只需设定最后一个参数NumberOfConcurrentThreads的值,指定在完成端口上同时运行的工作线程数量。设为0则表示工作线程数与系统CPU数一样多。(2)建立接收用户连接的主线程,在主线程里,创建连接套接字,并把套接字和已经建立的完成端口绑定,该步骤仍然使用CreateIoCompletionPort函数完成,第一个参数就是绑定的套接字,第二个参数是完成端口句柄,第三个参数是与套接字关联的句柄,通常是一个指针,指向关联对象,关联对象可以存储与套接字有联系的数据。套接字上可以开始调用WSARecv函数投递接收数据
文档评论(0)