开放地址法无锁哈希表实现

本文对比了无锁哈希表(基于开放地址法和CAS实现)与带读写锁的GNU hash_map在并发场景下的性能。在不同利用率下,无锁哈希表展现出显著的性能优势,但高利用率时冲突可能导致性能下降。测试环境为Intel E5620 CPU和4GB内存,测试压力为2读2写线程处理大量数据。未来可能的改进方向包括动态调整哈希表大小以提高内存利用率。
摘要由CSDN通过智能技术生成

可爱的作者称之为世界上最简单最快的无锁哈希表,我姑且也起这个名字。

本文的工作主要在于测试 (gnu的hash_map+读写锁)vs (无锁哈希表),我的比较只比较运行时间,不比较内存开销。

这个是作者原文:  http://preshing.com/20130605/the-worlds-simplest-lock-free-hash-table/


实现这个无锁的哈希表,最主要的技术要点在于:

1、用了开放地址法实现哈希表,实际内存开销会大于拉链法

2、用了CAS(compare and swap)语义实现小于等于8byte变量的原子操作

我的测试环境:
CPU: Intel(R) Xeon(R) CPU    E5620  @ 2.40GHz
MEMORY: 4G
测试压力:2个线程读2个线程写,每个读/写(2<<22)的数据量。

测试结果:
1、无锁哈希表的利用率为50%(预分配的空间只填满25%):那么LockfreeHashtable完成读写的时间GnuHashmap的一半;
2、若无锁哈希表的利用率为25%:那么LockfreeHashtable完成读写的时间GnuHashmap的1/10;
3、如果无锁哈希表的利用率为100%,那么将会耗费大量的时间在解决冲突,找到合适的位置来放置新的key-value,性能将会急剧下降,惨不忍睹。

两个声明:
1)gnu的hash_map是可以预分配bucket的数量的,通过构造函数设置。在本测试中,无论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值