• Rocket


    https://mp.weixin.qq.com/s/Pe7FGKzfRufzzYDrl0fQ7g

     
    介绍IDPool的实现。
     
     
    1. 基本介绍
     
    实现从ID池中分配和释放ID的功能。
     
    2. 实现
     
    1) numIds & idWidth
     
    numIds为ID池中ID的个数;idWidth为表示这么多ID所需要的比特数;
     
    2) io
     
    alloc为从ID池中分配一个ID时所使用的接口,io.alloc.bits为返回的ID号;
    free为从ID池中释放一个ID时所使用的接口,id.free.bits为要释放的ID号;
     
    3) bitmap
     
    位图:标识每个ID是否可用;
     
    4) select
     
    分配ID时选定的ID号;
     
    5) valid
     
    是否仍可以从池中分配ID,取决于当前池中是否还有ID可分配;
     
    6) take
     
    下一个要分配的ID位:
     
    7) given
     
    要释放的ID位。
     
    8) bitmap1
     
    分配或者释放之后的位图(bitmap for next clock cycle):
     
    9) select1
     
    下一个待分配的ID号(从小号开始分配):
     
    其中leftOR生成一个掩码,以取出bitmap1中最低的可分配的位:
     
    10) valid1
     
    是否仍有ID可分配;
     
    11) 更新bitmap
     
    如果发生ID的分配和释放,则更新bitmap,以及valid(是否仍有ID可分配):
     
    12) 更新select
     
    更新下一个要分配的ID号:
    a. 发生了分配动作;
    b. 在没有ID可分配的情况下,发生了释放动作;也就是说,分配是循环(round robin)的,在高ID没有分配过的情况下,即便低ID已经释放,仍然优先分配高ID。
     
    3. 附录
     
     
  • 相关阅读:
    java将一个或者多个空格进行分割
    Oracle decode()函数
    javascript 匿名函数和模块化
    javascript Math函数
    javascript 数组Array排序
    jQuery 获取屏幕高度、宽度
    fastJson 转换日期格式
    QNX Development Tools Based on Eclipse IDE
    Eclipse equinox implementation of OSGi
    Eclipse SWT
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10940736.html
Copyright © 2020-2023  润新知