Rayon para Rust: guia completo com exemplos

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

O que é Rayon e para que serve?

\n\n

Rayon é uma poderosa biblioteca para a linguagem de programação Rust, que fornece uma maneira simples e segura de paralelizar cálculos. Sua principal característica é o conceito de iteradores paralelos. Em vez de gerenciar manualmente threads, mutexes e canais, você simplesmente substitui um iterador sequencial (`.iter()`) por um paralelo (`.par_iter()`), e o Rayon distribui automaticamente o trabalho por todos os núcleos disponíveis da CPU.

\n\n

Para que serve esta biblioteca? No mundo moderno, processadores multi-core se tornaram padrão. No entanto, escrever código multi-thread manualmente é uma tarefa complexa, sujeita a condições de corrida, deadlocks e outros erros difíceis de detectar. O Rayon assume todas essas complexidades, oferecendo:

\n
    \n
  • Distribuição automática de trabalho: A biblioteca decide por si mesma como dividir os dados em partes e distribuí-los entre as threads.
  • \n
  • Segurança em nível de tipo: Graças ao sistema de ownership e borrowing do Rust, o Rayon garante a ausência de condições de corrida em tempo de compilação.
  • \n
  • Work-stealing (roubo de trabalho): Se uma thread termina sua tarefa antes das outras, ela "rouba" trabalho das threads ocupadas, garantindo uma carga uniforme em todos os núcleos.
  • \n
  • Facilidade de uso: A API do Rayon é intuitiva para qualquer desenvolvedor familiarizado com iteradores do Rust.
  • \n
\n\n

Rayon é ideal para tarefas que exigem processamento de grandes volumes de dados: processamento de imagens, simulações, cálculos numéricos, análise de arquivos e muito mais. Se sua tarefa pode ser facilmente dividida em subtarefas independentes (paralelismo de dados), o Rayon é a sua escolha.

\n\n

Instalação

\n\n

Rayon é instalado da maneira padrão para Rust – através do gerenciador de pacotes Cargo. Adicione a seguinte linha ao arquivo Cargo.toml do seu projeto:

\n\n
[dependencies]\nrayon = "1.10"
\n\n

Depois disso, execute o comando cargo build, e o Cargo baixará e compilará automaticamente a biblioteca. Rayon é uma biblioteca puramente Rust, portanto, nenhuma dependência adicional ou requisito de sistema é necessário. Ela funciona no Windows, macOS e Linux.

\n\n

Início rápido

\n\n

Vamos começar com um exemplo clássico: somar um grande array de números. Primeiro, faremos isso sequencialmente e, em seguida, paralelamente com o Rayon.

\n\n
// Importa a biblioteca\nuse rayon::prelude::*;\n\nfn main() {\n    // Cria um grande vetor de números\n    let numbers: Vec<u64> = (1..=10_000_000).collect();\n\n    // --- Soma sequencial ---\n    let sequential_start = std::time::Instant::now();\n    let sum_sequential: u64 = numbers.iter().sum();\n    let sequential_duration = sequential_start.elapsed();\n    println!("Soma sequencial: {} (tempo: {:?})", sum_sequential, sequential_duration);\n\n    // --- Soma paralela com Rayon ---\n    let parallel_start = std::time::Instant::now();\n    let sum_parallel: u64 = numbers.par_iter().sum(); // Substituímos .iter() por .par_iter()\n    let parallel_duration = parallel_start.elapsed();\n    println!("Soma paralela: {} (tempo: {:?})", sum_parallel, parallel_duration);\n\n    // Comparação de aceleração\n    println!("Aceleração: {:.2}x", sequential_duration.as_secs_f64() / parallel_duration.as_secs_f64());\n}
\n\n

Neste exemplo, fizemos apenas uma alteração: substituímos .iter() por .par_iter(). O Rayon automaticamente dividiu o vetor em partes, distribuiu-as entre as threads, calculou as somas parciais e, em seguida, combinou os resultados. Em um processador multi-core, você verá uma aceleração significativa.

\n\n

Principais métodos/funções

\n\n

1. par_iter()

\n

O que faz: Cria um iterador paralelo a partir de referências aos elementos de uma coleção. Este é o mét

Recommendations