memcached扩展哈希表(version 1.4.15)

memcached对item的管理采用了哈希表的方式进行管理, 采用的扩展哈希。memcached判断是否需要扩展比较简单, 就是判断当前的item个数是否超过桶数的3/2,而没有象berkeley DB中那样根据冲突的个数来扩展哈希:可能认为哈希算法比较好, 能比较平均的分布哈希键值(哈希算法: http://burtleburtle.net/bob/c/lookup3.c ,  http://burtleburtle.net/bob/hash/doobs.html)

    if (! expanding && hash_items > (hashsize(hashpower) * 3) / 2)
    {
        assoc_start_expand();
    }

memcached扩展哈希的方式是启动一个线程(assoc_maintenance_thread)来扩展和重构哈希表; 线程的同步采用条件变量(pthread_cond_wait, pthread_cond_signal)来实现线程同步.


memcached在哈希扩展中维护了两个哈希桶: old_hashtable和primary_hashtable; old_hashtable是扩展以前的哈希桶, primary_hashtable是正在扩展的哈希桶; 在扩展过程中不断的从old_hashtable中移到primary_hashtable中.因此在哈希扩展过程中如果有对哈希的操作需要判断扩展的进程来判断需要在那个哈希桶中查找(大部分是有互斥的)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值