DashMap Rust : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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.

Recommendations