hash_tbl 结构改造

在测试负载均衡策略时发现服务器运行效率未达预期,通过性能剖析定位到Hash表操作为瓶颈。本文探讨了原有拉链式Hash结构的问题,并提出采用变长数组替代链表以减少冲突链遍历时间,进一步提高系统的整体性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这两天正在为网络层制作负载均衡策略, 这个具体的细节会在今后逐步写出, 先来说说在测试负载均衡时遇到的一点问题.

 

  昨晚改好后, 负载均衡策略可以按照预期逻辑层指定的返回值进行继续通知或者挂起~, 从而让优先级更高连接类型获得更多的执行权. 但是测试的结果并不像预期那样美好, 虽然服务器不会因为buff不足而被迫断开连接, 但是运行效率依然和以前一样稳步下降, 这让我着实很恼火..., 于是直接加上 -pg参数开始profile...

 

  profile的结果让我出乎意料, 原来瓶颈居然出现在hash_tbl中, 其3个函数运行总时间占据了全部运行时间的80%, 经过简单优化, 依然只能达到70%多... 囧... 如下图..

 

 

 

  好吧, 再来重新看看这个hash_tbl的算法和结构, 该结构为标准的拉链式hash结构,  一个lockfree fifo链表充当冲突拉链, 冲突链的遍历占据了50%以上的时间, 看来这块确实效率是个严重的问题.

 

  考虑之后, 打算这样改下, 不采用链表作为冲突链, 使用变长数组作为拉链, 扩张系统定为1.5, 并额外增加一个当前使用映射表, 以便提速hash_foreach的遍历速度 :)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值