DashMap für Rust: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

DashMap für Rust: Vollständige Anleitung zur Concurrent Hash Map

1. Was ist DashMap und warum wird es benötigt?

DashMap ist eine hochperformante, nebenläufige (concurrent) Hash-Map für die Programmiersprache Rust, die speziell für den Einsatz in Multithread-Anwendungen entwickelt wurde. Die Standardbibliothek von Rust enthält zwar HashMap, diese ist jedoch nicht threadsicher (thread-safe). Wenn Sie versuchen, eine HashMap aus mehreren Threads ohne externe Synchronisation (z. B. Mutex oder RwLock) zu verwenden, gibt der Rust-Compiler einen Fehler aus. DashMap löst dieses Problem, indem es eine fertige Datenstruktur bereitstellt, die sicher gleichzeitig von vielen Threads verwendet werden kann, ohne sie manuell in Locks verpacken zu müssen.

Warum ist das wichtig? In modernen Multithread-Anwendungen besteht häufig die Notwendigkeit, einen gemeinsamen Zustand zu haben, auf den mehrere Threads zugreifen. Ein klassisches Beispiel ist ein Cache, ein Webserver, der Anfragen in einem Thread-Pool verarbeitet, oder eine In-Memory-Datenbank. Die Verwendung von Mutex<HashMap> kann schnell zu einem Engpass (Bottleneck) werden, da Mutex die gesamte Map blockiert, selbst wenn verschiedene Threads mit unterschiedlichen Schlüsseln arbeiten. DashMap verwendet die Technik des "Sharding": Die interne Hash-Tabelle ist in mehrere unabhängige Segmente (Shards) unterteilt, die jeweils durch ein eigenes RwLock geschützt sind. Dies ermöglicht gleichzeitige Lese- und Schreiboperationen in verschiedenen Segmenten ohne gegenseitige Blockierung, was auf Mehrkernprozessoren zu einer erheblichen Leistungssteigerung führt.

DashMap ist nicht nur ein threadsicherer Wrapper. Es bietet eine umfangreiche API mit Iteratoren, bedingten Operationen (Compare-and-Swap), Einfügen mit Rückgabewert und vielem mehr. Es wurde entwickelt, um für Entwickler, die an die standardmäßige HashMap gewöhnt sind, so ergonomisch und intuitiv wie möglich zu sein. Es ist eine der beliebtesten und ausgereiftesten Bibliotheken im Rust-Ökosystem für die Arbeit mit nebenläufigen Datenstrukturen.

2. Installation

Um DashMap zu Ihrem Rust-Projekt hinzuzufügen, verwenden Sie den Paketmanager cargo. Führen Sie den folgenden Befehl im Stammverzeichnis Ihres Projekts aus:

cargo add dashmap

Dieser Befehl fügt die neueste Version der Bibliothek zu Ihrer Cargo.toml-Datei hinzu. Wenn Sie dies lieber manuell tun möchten, fügen Sie die folgende Zeile im Abschnitt [dependencies] hinzu:

[dependencies]
dashmap = "6.1"

Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste stabile Version 6.1. Es wird empfohlen, die aktuelle Version zu verwenden, da die Bibliothek aktiv weiterentwickelt wird.

3. Schnellstart

Nachfolgend finden Sie ein minimales funktionsfähiges Beispiel, das die Erstellung einer DashMap, das Einfügen, Lesen und Löschen von Daten demonstriert.

use dashmap::DashMap;

fn main() {
    // Erstellt eine neue leere Hash-Map
    let map = DashMap::new();

    // Fügt Schlüssel-Wert-Paare ein
    map.insert("key1", 10);
    map.insert("key2", 20);

    // Liest einen Wert anhand des Schlüssels
    if let Some(value) = map.get("key1") {
        println!("Wert für 'key1': {}", *value);
    }

    // Aktualisiert einen Wert
    map.insert("key1", 100);

    // Entfernt ein Element
    map.remove("key2");

    // Überprüft die Länge
    println!("Anzahl der Elemente: {}", map.len());
}

Dieses Beispiel lässt sich ohne zusätzliche Locks kompilieren und ausführen, was ein entscheidender Vorteil von DashMap ist.

4. Wichtige Methoden

Betrachten wir 8 Schlüsselmethoden von DashMap. Alle Beispiele setzen use dash voraus.

Empfehlungen