Maison  >  Article  >  développement back-end  >  Partage de cas sur l'utilisation de la carte C++ et recherche de tests de performances

Partage de cas sur l'utilisation de la carte C++ et recherche de tests de performances

php是最好的语言
php是最好的语言original
2018-08-02 10:36:172308parcourir

Récemment, j'effectue un réglage des performances du service de recommandation. La logique principale de ce service est d'utiliser les données de modèle calculées hors ligne pour noter chaque publicité dans la demande, puis de renvoyer les résultats de tri de ces publicités ici. utilise Les données de la requête sont combinées en diverses clés pour vérifier une grande carte. Ce type de calcul est devenu un goulot d'étranglement majeur en termes de performances. Le code est relativement ancien et utilise boost::unordered_map pour résoudre ce problème. , j'ai trouvé une comparaison entre la bibliothèque tierce et la bibliothèque standard

Voici les résultats des tests sur une machine aws r4.xlarge (notez que -O2 doit être ajouté lors de la compilation) :

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

On peut voir que les performances de tsl::robin_map peuvent atteindre fondamentalement 10 fois celles de std::unordered_map. Ces performances sont également liées à la version du système d'exploitation et de la bibliothèque. recommandé d'extraire le code et de le tester dans votre propre environnement

Nous avons remplacé le boost::unordered_map d'origine par tsl::robin_map en ligne, et les performances globales ont été multipliées par 5. Bien sûr, il en inclut également. d'autres optimisations. Cette optimisation est un point d'optimisation relativement important

Articles connexes :

Test de recherche et de réglage de requêtes lentes MySQL

Recherche. test de performances de la fonction php

Vidéos associées :

Tutoriel manuel C++

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn