DashMap pour Rust : Guide complet de la table de hachage concurrente
1. Qu'est-ce que DashMap et pourquoi l'utiliser ?
DashMap est une table de hachage concurrente (concurrent) haute performance pour le langage Rust, conçue pour les applications multithread. La bibliothèque standard de Rust propose HashMap, mais celle-ci n'est pas thread-safe. Si vous essayez d'utiliser HashMap depuis plusieurs threads sans synchronisation externe (comme Mutex ou RwLock), le compilateur Rust générera une erreur. DashMap résout ce problème en fournissant une structure de données prête à l'emploi, qui peut être utilisée en toute sécurité par plusieurs threads simultanément, sans avoir à l'envelopper manuellement dans des verrous.
Pourquoi en avez-vous besoin ? Dans les applications multithread modernes, il est souvent nécessaire de partager un état accessible par plusieurs threads. Un exemple classique est un cache, un serveur web traitant des requêtes dans un pool de threads, ou une base de données en mémoire. Utiliser Mutex<HashMap> peut devenir un goulot d'étranglement (bottleneck), car Mutex verrouille l'intégralité de la carte, même si différents threads travaillent sur des clés différentes. DashMap utilise une technique de "sharding" (partitionnement) : la table de hachage interne est divisée en plusieurs segments indépendants (shards), chacun protégé par son propre RwLock. Cela permet d'effectuer des opérations de lecture et d'écriture simultanées sur différents segments sans blocage mutuel, offrant ainsi un gain de performance significatif sur les processeurs multicœurs.
DashMap n'est pas qu'une simple enveloppe thread-safe. Elle offre une API riche, comprenant des itérateurs, des opérations conditionnelles (compare-and-swap), une insertion avec retour, et bien plus encore. Elle est conçue pour être aussi ergonomique et intuitive que le HashMap standard. C'est l'une des bibliothèques les plus populaires et les plus matures de l'écosystème Rust pour la gestion des données concurrentes.
2. Installation
Pour ajouter DashMap à votre projet Rust, utilisez le gestionnaire de paquets cargo. Exécutez la commande suivante à la racine de votre projet :
cargo add dashmap
Cette commande ajoutera la dernière version de la bibliothèque à votre fichier Cargo.toml. Si vous préférez le faire manuellement, ajoutez la ligne suivante dans la section [dependencies] :
[dependencies]
dashmap = "6.1"
Au moment de la rédaction de cet article, la dernière version stable est la 6.1. Il est recommandé d'utiliser la version la plus récente, car la bibliothèque est activement développée.
3. Démarrage rapide
Voici un exemple minimal fonctionnel qui illustre la création d'un DashMap, l'insertion, la lecture et la suppression de données.
use dashmap::DashMap;
fn main() {
// Création d'une nouvelle table de hachage vide
let map = DashMap::new();
// Insertion de paires clé-valeur
map.insert("key1", 10);
map.insert("key2", 20);
// Lecture de la valeur associée à une clé
if let Some(value) = map.get("key1") {
println!("Valeur pour 'key1' : {}", *value);
}
// Mise à jour d'une valeur
map.insert("key1", 100);
// Suppression d'un élément
map.remove("key2");
// Vérification de la taille
println!("Nombre d'éléments : {}", map.len());
}
Cet exemple se compile et s'exécute sans aucun verrou supplémentaire, ce qui constitue l'un des principaux avantages de DashMap.
4. Méthodes principales
Examinons 8 méthodes clés de DashMap. Tous les exemples supposent que use dash est présent.
Aussi dans la bibliothèque
Turbine Kotlin : guide complet avec exemples de test Flow
Benchmark C++ : guide complet avec exemples
Programmation réactive en Rust : bibliothèques, frameworks et exemples pratiques
Génération de PDF en PHP : bibliothèques, outils et exemples de code
Configuration des applications Swift : outils et bibliothèques pour iOS/macOS