首页 > 程序开发 > 软件开发 > 其他 >

socket中基于I/O完成端口的构建

2011-08-24

感谢各位大牛、老师、前辈等等对我的帮助,对IOCP又再次的更加深入理解。网上流程了很多IOCP的代码例子,主要集中在vc和delphi中,不过处理方式都基本一致,看了很多例子,不过基于socket的IOCP确很少讲得透彻明...

感谢各位大牛、老师、前辈等等对我的帮助,对IOCP又再次的更加深入理解。网上流程了很多IOCP的代码例子,主要集中在vcdelphi中,不过处理方式都基本一致,看了很多例子,不过基于socket的IOCP确很少讲得透彻明白,不由的这里记录一下关于我对此的一些理解和想法。
IOCP处理一定程度上保证不会丢失socket请求,和解决了大量的多线程并发处理所消耗的资源。
从IOCP的结构上来讲,必然是windows中较为复杂的内核对象之一了,不过很多我们不需要考虑,例如:I/O设备列表、I/O完成队列、线程队列等,并不是这些不重要,而是微软已经帮我们在内核中都实现了,所谓的最复杂也就不是“如此复杂”了,我们的目的是构建这个IOCP框架!
对于socket中IOCP如何构建?流程如下:
创建I/O完成端口 --> 接收请求 --> 关联I/O完成端口 --> 进入I/O等待线程 --> 处理缓冲区(固定缓冲区,需要重复使用) --> 处理数据内容
一些注意的部分:
1.对于接受的每一个socket从堆上分配一块内存
用于将传递给I/O线程进行处理,必要的时候释放这块内存即可
2.对数据流同样每一个socket需要从堆上分配一块内存
用于对接收到的数据流进行集中处理,必要的时候释放这块内存即可
3.处理可传递二级指针
对数据处理中使用二级指针可以直接处理数据信息而不用返回,一定程度上提升了性能和强化了代码可读性
4.处理缓冲区和处理数据内容分离
使用2个函数处理比一个全部处理更加清晰,很多情况下在缓冲区没有达到条件不需要处理数据内容的
5.根据以上或者其他需求创建一个结构
应该是第一时间创建的,这里放到最后只是让大家更了解我们需要创建什么样的结构才能符合要求
相比之下思路清晰了写代码更加的方便了,重点在于如何处理缓冲区,当然这也需要根据不过项目的需求而定了。例如tcp与udp数据处理不一样,考虑更多的因素在其中了。

from:xuser blog

相关文章
最新文章
热点推荐