DashMap para Rust: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

DashMap para Rust: Guia Completo da Hash Table Concorrente

1. O que é e para que serve

DashMap é uma hash map concorrente (concurrent) de alto desempenho para a linguagem Rust, projetada para uso em aplicações multi-thread. Na biblioteca padrão do Rust existe o HashMap, mas ele não é thread-safe. Se você tentar usar HashMap a partir de várias threads sem sincronização externa (como Mutex ou RwLock), o compilador do Rust emitirá um erro. O DashMap resolve esse problema fornecendo uma estrutura de dados pronta que pode ser usada com segurança simultaneamente por várias threads, sem a necessidade de envolvê-la manualmente em locks.

Por que isso é necessário? Em aplicações multi-thread modernas, é comum precisar de um estado compartilhado acessado por várias threads. Um exemplo clássico é um cache, um servidor web processando requisições em um pool de threads, ou um banco de dados in-memory. Usar Mutex<HashMap> pode se tornar um gargalo (bottleneck), pois o Mutex bloqueia todo o mapa, mesmo que diferentes threads estejam trabalhando com chaves diferentes. O DashMap utiliza a técnica de "sharding": a hash table interna é dividida em vários segmentos independentes (shards), cada um protegido por seu próprio RwLock. Isso permite operações simultâneas de leitura e escrita em diferentes segmentos sem bloqueio mútuo, proporcionando um ganho significativo de desempenho em processadores multi-core.

O DashMap não é apenas um wrapper thread-safe. Ele oferece uma API rica, incluindo iteradores, operações condicionais (compare-and-swap), inserção com retorno, e muito mais. Foi projetado para ser o mais ergonômico e intuitivo possível para desenvolvedores acostumados com o HashMap padrão. É uma das bibliotecas mais populares e maduras do ecossistema Rust para trabalhar com dados concorrentes.

2. Instalação

Para adicionar o DashMap ao seu projeto Rust, use o gerenciador de pacotes cargo. Execute o seguinte comando no diretório raiz do seu projeto:

cargo add dashmap

Este comando adicionará a versão mais recente da biblioteca ao seu arquivo Cargo.toml. Se preferir fazer isso manualmente, adicione a seguinte linha na seção [dependencies]:

[dependencies]
dashmap = "6.1"

No momento da escrita deste artigo, a versão estável mais recente é a 6.1. Recomenda-se usar a versão atual, pois a biblioteca está em desenvolvimento ativo.

3. Início Rápido

Abaixo está um exemplo mínimo funcional demonstrando a criação de um DashMap, inserção, leitura e remoção de dados.

use dashmap::DashMap;

fn main() {
    // Cria um novo hash map vazio
    let map = DashMap::new();

    // Insere pares chave-valor
    map.insert("chave1", 10);
    map.insert("chave2", 20);

    // Lê o valor de uma chave
    if let Some(valor) = map.get("chave1") {
        println!("Valor para 'chave1': {}", *valor);
    }

    // Atualiza um valor
    map.insert("chave1", 100);

    // Remove um elemento
    map.remove("chave2");

    // Verifica o tamanho
    println!("Número de elementos: {}", map.len());
}

Este exemplo compila e executa sem quaisquer locks adicionais, o que é uma vantagem chave do DashMap.

4. Métodos Principais

Vamos explorar 8 métodos essenciais do DashMap. Todos os exemplos assumem use dash

Recommendations