基础数据结构:

 

 

 (注意dict是字典,dict->type是相关函数指针, dict->type->keyDup是执行该方法)

具体调用链路:

 

 

 

 

渐进式rehash:

 

 新增/删除时:

 

 

 查询时:

 

都会进行rehash

所以当dict数据量大的时候,在扩容时,可能会影响set/get的rt

 

 

 

GOOD:https://blog.csdn.net/belalds/article/details/93713491

size 空间大小,used 已使用

 

 

 

 总体过程:

步骤1:判断是否要扩容:

 

 

 步骤2:渐进式扩容前准备:

 

 

 准备方法:

 

步骤3:在增删改查时进行部分rehash工作:

 

每次增量式的数量:

 

 

数量为 1* 10:

 

 这里指的数量(或者说bucket),是指数组元素的个数,每个元素即为一个链表。

可见,当字典数据量大时,假设1000万数据,1:1的情况,那么需要100万次操作才能rehash万。

 

 

 

 系统帮助是每次 100 * 10 = 100个数组元素:

 

 

 

问题:

 

 

 

posted on 2019-11-27 08:53  大辉_FFf  阅读(162)  评论(0编辑  收藏  举报