星绽紫辉(rawdata)的Blog

快乐地学习,快乐地工作!

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  16 Posts :: 0 Stories :: 37 Comments :: 0 Trackbacks

常用链接

留言簿(5)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

a.IOCP要做好3件事:
1>将完成端口与socket关联
2>实现异步的I/O调用
3>线程间的同步


b.异步I/O调用要实现的东西:
1>处理好CompletionKey参数---->附加用户参数
2>处理好Overlapped参数----->I/O内存传递参数


c.模型
所有的I/O调用都是间接通过"完成端口"对象实现的。
1>发送状态---->PostQueuedCompletionStatus
2>查询状态---->GetQueuedCompletionStatus

d.IOCP 3大麻烦事
1>WSAENOBUFS------操作系统锁定内存的最大数量的问题(解决方案:投递1个空的WSARecv)。
>>这样做牺牲了1个单独连接的吞吐量但是能获得较高的并发连接数.
>>当收到完成通知时,使用WSARecv接收数据,直到返回WSAEWOULDBLOCK
>>但是单个连接的吞吐量也可以通过连续投递若干个(需计算)WSARecv来改善(这里需要综合考虑获取1个平衡点)

2>包的乱序问题
>>包的乱序问题可以通过编号来避免,同时将乱序的包保存在HashTable中
>>包的乱序可以是包之间的乱序和包内数据的乱序

3>内存访问错误的问题
>>当客户机断开连接后,线程池可能尝试多次释放"客户机的附加数据",造成内存访问错误。
>>解决办法,对Pending包进行计数统计,当Pending包为0时才释放内存。

posted on 2011-11-18 11:41 星绽紫辉 阅读(226) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理