注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

IOCP的实践之三编程框架之发送和接收中发送部分包的情况原因及大量投递的情况解决方法  

2013-11-27 19:49:10|  分类: 网络服务编程技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

IOCP的实践之三编程框架之发送和接收中发送部分包的情况原因及大量投递的情况解决方法

前面说了会有部分包的情况,那么在什么情况下会有部分包的情况呢,也就是说在驱动或者说内核层面上的缓冲区耗尽时,可能会出现部分包的情况。

一般来说,只有在非阻塞状态下,连续在一个IO上多次投递,也就是多次WSASend 的情况下,应该可能会出现这种情况。但是目前没有测试出来过,不敢说。也就是说,只有在这种情况下,数据才可能会拆分成两包来进行发送。也就呼应了上文的部分包的接收。

那么在反复的大量的IO投递的情况下,如何来控制内存大量被锁住,以及数据的分包呢?这又引出了“大数据量发送”的问题,这个在第二篇IOCP中发问了,但是留到了后来,也就是现在来说明。

连续的大数据量发送,可以直接在多个线程上操作WSASend,然后编好序号,发送就可以了。难得在WSARecv上,连续的投递接收IO,会引起许多内存的锁定,那么这里有一个小技巧,可以投递一个缓冲区为0WSARecv操作,如果返回零,那么说明这时有数据,就可以再次投递WSARecv了,再把真正的数据收回来。

事情得慢慢得来做,不能着急。

  评论这张
 
阅读(470)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017