zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/1vyfhZuF4RyRE5Qjj6AGWA

     
    简单介绍SourceShrinker的实现。
     
     
    1. 基本介绍
     
    用于把上游节点的source数量压缩到指定的值(maxInFlight)。
     
    2. diplomacy node
     
    diplomacy node用于与上下游节点相连接,并分别向上下游传递参数信息。
     
    1) client
     
    压缩之后的client参数,即要展示给下游节点看的client参数:
    其中:sourceId的范围限定在最大值是maxInFlight。
     
    2) node
     
    定义用于适配参数的clientFn和managerFn:
    其中:
    a. clientFn:在client的基础上,对requestFifo进行处理,确定是否需要下游节点的FIFO支持;
    b. managerFn:如果maxInFlight==1,那么SourceShrinker节点只能并发处理一个请求,相当于告诉上游节点SourceShrinker只有一个fifo。
     
    3. lazy module
     
    lazy module用于实现SourceShrinker的内部逻辑。这里主要是在上下游节点之间对source域进行适配。
     
    1) 成对的输入边和输出边
     
     
    2) 不支持适配Cache节点
     
     
    3) 如果maxInFlight的值大于原有sourceId的数目那么就相当于要放大,也就不存在压缩sourceId的情况,直接透传source域即可,无需适配:
     
    下面介绍需要压缩sourceId的情况。
     
    4) 生成一个sourceId的位图:
     
    其中:
    a. sourceIdMap的宽度为maxInFlight位,即每个允许的sourceId一位;
    b. allocated:记录哪些sourceId已分配的位图;
    c. nextFree:下一个空闲可使用的sourceId;
    d. full:是否所有的sourceId都已经被分配占用;
     
    5) 如果所有的sourceId都被占用,就阻止上游节点继续发送请求:
     
    6) 把in.a.bits.source适配成下一个可使用的sourceId:
     
     
    记录新分配的sourceId,对应的原sourceId:
     
    7) 根据响应消息中的source,查找记录中对应的sourceId,并还原到in.d.bits.source:
     
    其中:bypass用于处理同一个时钟周期可以返回响应消息的情况。
     
    8) 更新位图信息:
     
     
     
  • 相关阅读:
    Git 上传本地项目
    virtual和override
    ASP .NET依赖注入理解
    dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件
    C++ 简单选择排序
    C++ 排序
    iOS UIDynamic
    iOS Modal
    C++ 折半查找
    C++ 二叉链表
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11460975.html
Copyright © 2011-2022 走看看