hash_tbl 改造续..

  经过一晚上的倒腾... 终于重构好了hash_tbl, 思路和之前想的一样~ , 从索引头到冲突链都使用数组实现~ 结构如下:

 

 

 

  原来协议层也用的hash_tbl进行管理, 但因为协议是连续自增ID, 不存在动态变化的可能, 所以这块不使用hash_tbl管理了, 直接用静态数组进行映射.

  这样的话, 只有逻辑层发送协议的位置有通过hash_tbl查找具体的net_buff, 不过这块是hash_find, 并无大碍. 因为我们关注的只是hash_foreach的调用, 尽可能的减少它的使用, 才能使程序突破瓶颈.

  重构之后, 重点的压力比较大的hash_foreach只存在于epoll_wait线程与处理线程桥接的管道, keepalive查询, 待释放net_buff队列.

 

  OK, 这样的优化之后, 测试了下, 效果非常不错~

  优化之后的profile:

 

 

  从上图可以看出, foreach已经不再占据消耗时间最多的位置,  下滑到了第8的位置, 整体性能上升了不少, 非常稳定的跑在 16000 count/per sec, 压力测试里每一次完整的调用包含了2次普通协议处理, 2次异步数据库查询, 总体来说, 还算比较满意. :)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值