zoukankan      html  css  js  c++  java
  • DIOCP开源项目-DIOCP3重写笔记-1

    这几天在在重新DIOCP3,基本工作已经初步完成,进入测试阶段,今天加入排队投递,本认为是个很简单的工作,稍微不注意,留了两个坑,调了7,8个小时,刚刚总算找到问题,记录一下,

    关于排队投递的流程

    image

    这是投递一个TIocpSendRequest的流程,投递开始,投递一块数据,最大50K,如果超过50K则分批进行投递。流程是没错,我刚开始的写法是:

    image

    其中InnerPostRequest是投递发送数据到iocp队列中去,投递完成后然后增加内存块的Postion,以便于下次继续投递。看上去貌似没什么问题。如果网络情况相当好的情况下面,特别是本机,投递后另外线程马上相应完成事件<在里面进行判断的时候FPosition时,还木有累加上去,杯具就这么一点点产生了>。既然知道了原因,就好解决问题了。

     

    修改下,这边不处理Postion的增加,在HandleResponse中处理。

    image

    在发送完数据后,再进行FPostion的增加,然后判断,是否还有剩余数据需要发送。终于把这坑填好了。

     

    还是那句话:"并发设计:决不要假设任何代码会连续执行”

  • 相关阅读:
    编写安全检测脚本
    编写监控脚本
    编写一键部署软件脚本
    awk扩展应用
    sed基本用法
    字符串截取及切割,正则表达式,expect预期交互
    For,while,case,shell循环结构
    mybatis使用associaton进行分步查询
    mybatis中封装结果集常见示例
    Mybatis获取数据库自增主键
  • 原文地址:https://www.cnblogs.com/DKSoft/p/3883867.html
Copyright © 2011-2022 走看看