Rocket - util - IDPool
2024-09-01 17:17:42
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. 附录
略
最新文章
- mysql 用drop和delete方法删除用户的区别
- C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法
- Elasticsearch 安装中文分词
- 页面加载时执行JQ代码
- linux笔记:shell基础-bash变量
- model的封装+MJExtension 方便后续处理
- Relative 定位与Absolute 定位实例
- Sublime发布Markdown博客
- Introducing Microsoft Sync Framework: Sync Services for File Systems
- T-SQL 之 多表联合更新
- 【风马一族_xml】xml语法
- 收集统计信息让SQL走正确的执行计划
- POI做题记录:第二届POI
- Libgdx开发ios游戏
- POJ 3080 Blue Jeans(后缀数组+二分答案)
- Java IO编程全解(三)——伪异步IO编程
- 利用exosip DNS CACHE自定义SIP服务器地址和端口
- shell IFS
- FFT(快速傅里叶变换)摘要
- 堆排序(最大堆)的理解和实现(Java)
热门文章
- Python3 迭代器与生成器 - 学习笔记
- 向Redis里存入数据
- Fortify Audit Workbench 笔记 File Disclosure: Spring 文件泄露(Spring框架)
- 【Linux基础总结】Shell 基础编程
- Power BI:社保、公积金增减
- 这些Kubernetes常见安全问题,你遇到过几个?
- python 数据类型: 字符串String / 列表List / 元组Tuple / 集合Set / 字典Dictionary
- git --添加多个文件
- 当Tomcat遇上Netty
- Vue+Vuex实现自动登录 升级版