1. 一次申请很大一块内存,再不释放,每次使用从中分割一块。
2.每次需要内存用malloc申请一块,但不free,delete时进行标记失效,方便之后使用。
内容点:架构,代码结构,核心数据结构(settings, stats), 内存机制(简述,数据结构,代码解析)
每个slab是1M大小的内存,slab+(1M*n)访问第n个slab。
slabClass集合通过end_page_ptr访问第一个可用的trunk, 或者通过*slot访问无效的items。
第三种方式是:淘汰已有的,引入新的,并把链接位置换到下一个大的slabClass集合中。
一致性Hash:
1. 实体A,B,C,D
2. 实体虚拟节点个数。
虚拟节点
1. 指向实体的指针。
2. long型的hash值。
用红黑树(key, VirtualNode)存储虚拟节点。
用MD5计算节点的hash值。
machineA0, 9, MD5码,存入char digest[16]中,4个32位分组组成,生成hash为-1271248791。
machineA01, 10, MD5码,hash值为290358157.
machineA012
machineA0123
130.137.211.198, MD5码, 值为hash=1394015758。在红黑树中查找key值比hash大的最小节点。
if (node->key < x->key) then x=x->left; 左小。
红黑树:
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 性质1. 节点是红色或黑色。 性质2. 根节点是黑色。 性质3 每个叶节点是黑色的。 性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点) 性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。
原因:性质4导致了路径不能有两个毗连的红色节点就足够了。最短的可能路径都是黑色节点,最长的可能路径有交替的红色和黑色节点。因为根据性质5所有最长的路径都有相同数目的黑色节点,这就表明了没有路径能多于任何其他路径的两倍长。
https://files.cnblogs.com/qingxia/Consistenthashalgorithm.zip