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的增加,然后判断,是否还有剩余数据需要发送。终于把这坑填好了。

     

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

  • 相关阅读:
    Macbook下安装memcached
    CI框架视图继承
    JavaScript&jQuery 基本使用
    Mac下PHP的环境搭建
    完善口语第一步
    php反射
    php_Trait
    php接口和抽象类
    使用seafile搭建自己的私有云存储
    PHP 简单面向对象 验证码类(静态实例对象调用)
  • 原文地址:https://www.cnblogs.com/DKSoft/p/3883867.html
Copyright © 2011-2022 走看看