美文网首页
c++ map 查找性能测试

c++ map 查找性能测试

作者: hatlonely | 来源:发表于2018-08-01 23:15 被阅读0次

最近在为推荐服务作性能调优,这个服务的主要逻辑是用离线计算的模型数据给请求中的每个广告打分,再返回这些广告的排序结果,这里面打分的过程其实就用请求中的数据拼成各种key,去查一个大的 map,这种计算非常多,成为了主要的性能瓶颈,代码比较老,使用的是 boost::unordered_map,为了解决这个问题,找了一些第三方库和标准库对比了一下

下面是在一台 aws r4.xlarge 机器上的测试结果(注意编译的时候一定要加 -O2):

std::map<int, int>                                 => 51866903
std::unordered_map<int, int>                       => 3838175
std::unordered_map<int, int, nohashint>            => 3508570
std::unordered_map<int, int>(N)                    => 3804471
boost::unordered_map<int, int>                     => 3291384
boost::unordered_map<int, int, nohashint>          => 3293934
boost::unordered_map<int, int>(N)                  => 3265856
google::dense_hash_map<int, int>                   => 785969
google::dense_hash_map<int, int, nohashint>        => 784455
google::dense_hash_map<int, int>(N)                => 899262
tsl::hopscotch_map<int, int>                       => 654668
tsl::hopscotch_map<int, int, nohashint>            => 680964
tsl::hopscotch_map<int, int>(N)                    => 663607
tsl::robin_map<int, int>                           => 406176
tsl::robin_map<int, int, nohashint>                => 411358
tsl::robin_map<int, int>(N)                        => 409993

可以看到 tsl::robin_map 的性能基本上能达到 std::unordered_map 的 10 倍,这个性能和操作系统以及库版本也有一定关系,实际生产环境中建议把代码拉下来在自己的环境下测试一下

我们线上用 tsl::robin_map 替换了原来的 boost::unordered_map,整体性能提升了 5 倍,这里面当然也还包含了一些其他的优化,这个优化算是比较大的优化点了

参考链接

转载请注明出处
本文链接:http://www.hatlonely.com/2018/08/01/c-map-%E6%9F%A5%E6%89%BE%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/

相关文章

  • c++ map 查找性能测试

    最近在为推荐服务作性能调优,这个服务的主要逻辑是用离线计算的模型数据给请求中的每个广告打分,再返回这些广告的排序结...

  • 第十讲 常用de数据结构

    数组 数组长度不可变查询性能高,按照下标直接查找 List 长度可变插入删除性能高,链式查找 Map、Set 键值...

  • 5.自动化测试工具

    单元测试工具 JUnit:Java单元测试 NUnit CppUnit:C++单元测试 性能测试工具 LoadRu...

  • SSDB的安装

    SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 KV, list, map(hash)...

  • Map遍历方式方式及性能测试

    Java Map遍历方式方式及性能测试 1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entryS...

  • 第十五周

    Algorithm 两类查找问题(Set 和 Map)Set用于查找有无 (检查是否存在、去重问题)Map用户查找...

  • 软件性能测试目录

    软件性能测试Ⅰ 软件性能测试Ⅱ 软件性能测试Ⅲ 软件性能测试Ⅳ 软件性能测试Ⅴ 软件性能测试Ⅵ 软件性能测试Ⅶ 软...

  • 白盒工具介绍

    Jtest Java 代码分析和动态类、组件测试 Jcontract Java 实时性能监控以及分析优化 C++ ...

  • 关于不同排序算法的性能比较

    一个排序算法性能测试的c++实现,用于测试不同排序算法的耗时,代码如下: 比较直接排序与选择排序示例: 测试结果:

  • 性能测试概览目录

    性能测试概览Ⅰ 性能测试概览Ⅱ 性能测试概览Ⅲ 性能测试概览Ⅳ

网友评论

      本文标题:c++ map 查找性能测试

      本文链接:https://www.haomeiwen.com/subject/bmudvftx.html