IOCP理解

原创 2013年12月06日 10:31:14
以下叙述仅限于网络通信。
所谓完成端口,就是一个队列。
这个队列里面以句柄(网络通信里为socket)为元素,在有消息到达后,通知工作线程(如果队列里的元素有投递请求)进行消息处理。这个流程与select模型相反,select模型是主动查询去获取消息,而iocp则是由windows内核通知工作线程有消息来了你可以进行处理了。
同时,iocp有一个消息队列,其中的每一个消息只会发送给一个工作线程。
具体流程(UDP为例):
1.创建完成端口;
2.启动工作线程;
3.创建socket并与本地端口绑定;
4.将socket句柄关联到完成端口;
5.投递请求;
6.关闭socket句柄;
7.关闭完成端口;
在上述流程中,对于每个socket句柄,3、4、5、6是必须的。而在每个socket的流程中,5步骤必须重复,因为只有先投递请求才能收到响应。

关于完成端口收到消息后的数据处理。
1.创建IO类,该IO类中有存储数据的链表、消息处理回调函数的地址等信息。在该IO类的启动函数(自定义函数)中,创建存储空间并启动消息处理线程,在该线程中调用回调函数处理存储空间中的数据。
2.每个socket句柄关联一个IO类对象,并把该socket的处理收到的消息的函数的地址传给IO类对象。
3.把在工作线程中收到的消息直接存储到IO类对象中,保证工作线程不会阻塞或者耗费很长时间去处理一个消息。
4.该IO类必须能够自动扩展。比如原来的存储空间为1M,现在已经写满了,却都没有处理,然而消息还在源源不断的到来,此时必须扩展存储空间以容纳更多的消息,当然,如何扩展及扩展多少则根据需求决定。
5.该IO类最好能够自动缩减存储空间,在消息比较少的时候释放部分存储空间。

经测试,在每s一万条消息的情况下,iocp服务工作正常。在每s有8-10万条消息的情况下也能保证每条消息都收到,对比select模型简直堪称完美!

由于是用手机,代码就不提供了。

总结:iocp只是MS提供的一个处理模型,至于具体的消息接收、数据处理等则需要自行实现,对于高并发服务器简直是利器。

多种SOKECT通讯模型的理解(select,WSAAsyncSelect,WSAEventSelect,Overlapped I/O 事件通知,Overlapped I/O 完成例程,IOCP)

老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。   这和Socket模型非常类似。下面我就以老陈接收信件为例讲解SocketI/O模型。  ...
  • fion45
  • fion45
  • 2013年10月10日 08:35
  • 4174

IOCP的笔记及理解

WIN下最好的网络模型可能就是IOCP完成端口了吧 经过几天的研究可以使用以下比喻来理解完成端口, 完成端口中的完成表示IO操作已经完成后才通知程序,完成端口可以更形象的想象成是完成队列 这里我...
  • Debugyt
  • Debugyt
  • 2012年10月23日 00:32
  • 327

对于TCP协议中IOCP模型的一些简单的理解

请不要觉得这一篇没有代码的文章没意义,对IOCP模型的代码,百度搜索可以得到很多,但是后续很多需要纠结的地方,很多人都经历过,如果你已经在尝试写IOCP服务端了,那么你很可能会对写代码之外的一些设计问...
  • Gnorth
  • Gnorth
  • 2014年09月22日 11:00
  • 1942

Winsock的IOCP的初步应用与理解

winsock最主要的功能基于socket套接字,现在学得还不是特明白,有个初步的大概认识,通过同步异步IO方式,适用于不同的网络,现在主要提出几个winsock的关键点。在定义sockaddr_in...

CSDN论坛网友写的一篇IOCP文章 -- 理解IOCP

欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我...

c++ IOCP模型服务端

  • 2017年10月27日 09:28
  • 83.59MB
  • 下载

iocp服务器

  • 2017年07月25日 14:36
  • 116KB
  • 下载

select iocp等常见模型的区别特点

首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) ...

iocp服务器的源码

  • 2015年06月12日 11:06
  • 31KB
  • 下载

iocp代码示例

  • 2015年04月07日 16:27
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOCP理解
举报原因:
原因补充:

(最多只允许输入30个字)