利用cpu cache、原子lock实现超高并发场景下hash设计附源码

本文探讨了一种针对哈希表的优化方法,通过利用CPU缓存和原子锁,在单线程和多线程并发场景下显著提高了查询和修改操作的效率。测试结果显示,优化后耗时降低约30-50%,特别是在哈希桶长度大于64K时,优化效果更为明显。优化设计实现了低锁冲突,保持了多线程并发操作的性能。
摘要由CSDN通过智能技术生成

在码界,最基础、最常用的数据结构出列几位,哈希表(又叫散列)理所当仁不让;

列几处哈希表这位重兵把守的地方:

  1. 在linux os kernel,在四层UDP和TCP各有一个全局Hash表,报文经协议栈上送到四层后根据4元组算出哈希索引找到对应的socket表项,从而关联到对应的用户进程;
  2. 全互联网都在用的缓存中间件Redis,就是一个Hash表上挂了各种各样的数据项,其他几位NoSql届的key-value翘楚Memcache、Cassandra、Etcd也无一例外。

Hash表既然这么基础、这么普通,能有什么好优化的地方?即便有,也早已路人皆知了吧!本文接下来讲述的优化方式也许早有大咖发表过,但是我真没看到过,这里实现纯属我个人的想法!

先晾几张常规实现方式和优化后的测试数据对比图:

1.单线程,一次查询、修改耗时,优化前后对比图:
在这里插入图片描述

2.同时并发16个线程操作Hash表(每个线程绑定cpu核,注意这里超线程核不参与),一次查询、修改耗时,优化前后对比图:
在这里插入图片描述

测试说明:
1.哈希桶长3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值