iocp模型总结(转)(IOCP model summary (turn)).docVIP

iocp模型总结(转)(IOCP model summary (turn)).doc

  1. 1、本文档共20页,可阅读全部内容。
  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模型总结(转)(IOCP model summary (turn))

iocp模型总结(转)(IOCP model summary (turn)) iocp模型总结 (转) iocp (i / a completion port, i / o完成端口) 是性能最好的一种i / o模型.它是应用程序使用线程池处理异步i / o请求的一种机制.在处理多个并发的异步i / o请求时, 以往的模型都是在接收请求是创建一个线程来应答请求.这样就有很多的线程并行地运行在系统中.而这些线程都是可运行的, windows内核花费大量的时间在进行线程的上下文切换, 并没有多少时间花在线程运行上.再加上创建新线程的开销比较大, 所以造成了效率的低下. 调用的步骤如下: 抽象出一个完成端口大概的处理流程: 1: 创建一个完成端口. 2: 创建一个线程a. 3: a线程循环调用getqueuedcompletionstatus () 函数来得到io操作结果, 这个函数是个阻塞函数. 4: 主线程循环里调用accept等待客户端连接上来. 5: 主线程里accept返回新连接建立以后, 把这个新的套接字句柄用createiocompletionport关联到完成端口, 然后发出一个异步的wsasend或者wsarecv调用, 因为是异步函数, wsasend / wsarecv会马上返回, 实际的发送或者接收数据的操作由windows系统去做. 6: 主线程继续下一次循环, 阻塞在accept这里等待客户端连接. 7: windows系统完成wsasend或者wsarecv的操作, 把结果发到完成端口. 8: a线程里的getqueuedcompletionstatus () 马上返回, 并从完成端口取得刚完成的wsasend / wsarecv的结果. 9: 在a线程里对这些数据进行处理 (如果处理过程很耗时, 需要新开线程处理), 然后接着发出wsasend / wsarecv, 并继续下一次循环阻塞在getqueuedcompletionstatus () 这里. 归根到底概括完成端口模型一句话: 我们不停地发出异步的wsasend / wsarecv io操作, 具体的io处理过程由windows系统完成, windows系统完成实际的io处理后, 把结果送到完成端口上 (如果有多个io都完成了, 那么就在完成端口那里排成一个队列).我们在另外一个线程里从完成端口不断地取出io操作结果, 然后根据需要再发出wsasend / wsarecv io操作. 而iocp模型是事先开好了n个线程, 存储在线程池中, 让他们hold.然后将所有用户的请求都投递到一个完成端口上, 然后n个工作线程逐一地从完成端口中取得用户消息并加以处理.这样就避免了为每个用户开一个线程.既减少了线程资源, 又提高了线程的利用率. 完成端口模型是怎样实现的呢? 我们先创建一个完成端口 (:: createiocompletioport ()).然后再创建一个或多个工作线程, 并指定他们到这个完成端口上去读取数据. We associate a remote connection to the socket handle completion port (or:: CreateIoCompletionPort ()). Everything is OK. What do the work thread? The first is called: GetQueuedCompletionStatus () function in the associated with the completion of all the complete socket port waiting for I/O. To determine what type of I/O completed. Generally speaking, there are three types of I/O, OP_ACCEPT, OP_READ and OP_WIRTE. We read the data into the data buffer, then delivery of one or more of the same type (I/O), AcceptEx (:::: WSARecv:: WSASend (), ()). To read the data, we can according to their own needs to make corresponding processing. Therefore, we need a OVERLAPPED (overlapping I/O per-I/O data structure) custom for the f

文档评论(0)

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

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档