案例分享c++ map的使用和 尋找效能測試

來源:互聯網
上載者:User
最近在為建議服務作效能調優,這個服務的主要邏輯是用離線計算的模型資料給請求中的每個廣告打分,再返回這些廣告的排序結果,這裡面打分的過程其實就用請求中的資料拼成各種key,去查一個大的 map,這種計算非常多,成為了主要的效能瓶頸,代碼比較老,使用的是 boost::unordered_map,為瞭解決這個問題,找了一些第三方庫和標準庫對比了一下

下面是在一台 aws r4.xlarge 機器上的測試結果(注意編譯的時候一定要加 -O2):

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

可以看到 tsl::robin_map 的效能基本上能達到 std::unordered_map 的 10 倍,這個效能和作業系統以及庫版本也有一定關係,實際生產環境中建議把代碼拉下來在自己的環境下測試一下

我們線上用 tsl::robin_map 替換了原來的 boost::unordered_map,整體效能提升了 5 倍,這裡面當然也還包含了一些其他的最佳化,這個最佳化算是比較大的最佳化點了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.