Uma crate Rust com ferramentas de concorrência: filas lock-free, deques com roubo de trabalho, canais, GC baseado em epochs, atomics e threads com escopo.
rayon-rs/rayon
Uma biblioteca de paralelismo de dados para Rust que transforma iteradores sequenciais em paralelos com uma mudança mínima na API.
- Estrelas
- 13,399
- Forks
- 618
- Issues abertas
- 233
- Último commit
- há 2 meses
O que é?
Rayon é uma biblioteca de paralelismo de dados para Rust. Sua interface principal, o iterador paralelo, permite transformar uma computação sequencial em paralela alterando uma chamada como iter() para par_iter(). Então, Rayon decide como dividir o trabalho em tarefas e ajusta essa divisão para maximizar o desempenho.
Para ter mais controle, Rayon oferece as funções join e scope para criar tarefas paralelas manualmente, além de pools de threads personalizados que podem ser usados no lugar do pool global padrão. Suas APIs são projetadas para garantir a ausência de data races; assim, em geral, o código que compila se comporta como na execução sequencial. Iteradores paralelos produzem os mesmos resultados que suas versões sequenciais, com a ressalva de que efeitos colaterais, como enviar dados por canais ou gravar em disco, podem ocorrer em uma ordem diferente.
Rayon é publicado no crates.io e requer rustc 1.85 ou posterior. No WebAssembly, por padrão, ele recorre à iteração sequencial; para usar multithreading nesse ambiente, é necessário um adaptador como wasm-bindgen-rayon.
Recursos principais
- 01Transforma iteradores sequenciais em paralelos com uma pequena alteração, como trocar iter() por par_iter().
- 02Oferece as funções join e scope para criar tarefas paralelas manualmente.
- 03Permite usar pools de threads personalizados além do pool global padrão.
- 04É projetado para garantir, no nível da API, a ausência de data races.
- 05Oferece versões paralelas alternativas de alguns métodos de iteradores sequenciais.
Casos de uso
- Acelerar loops limitados pelo desempenho da CPU que percorrem coleções grandes em aplicações Rust.
- Paralelizar transformações de dados, como map, filter e sum, em slices ou vectors.
- Criar cargas de trabalho personalizadas com paralelismo de tarefas usando join, scope ou pools de threads dedicados.
- Executar código Rust com multithreading no navegador usando wasm-bindgen-rayon.
Início rápido
- 1
Adicione Rayon às dependências do Cargo.toml
[dependencies] rayon = "1.12" - 2
Traga os traits de iteradores paralelos para o escopo em cada módulo
use rayon::prelude::*; - 3
Altere foo.iter() para foo.par_iter() para executar o iterador em paralelo
Antes de usar
- Requer rustc 1.85.0 ou mais recente.
- No WebAssembly, o código recorre à iteração sequencial, a menos que você adicione separadamente o adaptador wasm-bindgen-rayon e sua configuração.
Tópicos
Perguntas frequentes
- O que é rayon?
- Uma biblioteca de paralelismo de dados para Rust que transforma iteradores sequenciais em paralelos com uma mudança mínima na API. Rayon é uma biblioteca de paralelismo de dados para Rust. Sua interface principal, o iterador paralelo, permite transformar uma computação sequencial em paralela alterando uma chamada como iter() para par_iter(). Então, Rayon decide como dividir o trabalho em tarefas e ajusta essa divisão para maximizar o desempenho.
- rayon é gratuito? Qual é a licença?
- rayon é open source sob a licença Apache-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
- rayon ainda é mantido?
- Atualizado nos últimos 6 meses. O último commit de rayon foi em 28 de ago. de 2026.
- Para que posso usar rayon?
- Acelerar loops limitados pelo desempenho da CPU que percorrem coleções grandes em aplicações Rust. Paralelizar transformações de dados, como map, filter e sum, em slices ou vectors. Criar cargas de trabalho personalizadas com paralelismo de tarefas usando join, scope ou pools de threads dedicados. Executar código Rust com multithreading no navegador usando wasm-bindgen-rayon.
- Como instalar rayon?
- Adicione Rayon às dependências do Cargo.toml: [dependencies] rayon = "1.12" Traga os traits de iteradores paralelos para o escopo em cada módulo: use rayon::prelude::*; Altere foo.iter() para foo.par_iter() para executar o iterador em paralelo
- Onde consigo rayon?
- O código-fonte e as instruções de instalação estão no GitHub: https://github.com/rayon-rs/rayon
Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.
Projetos relacionados
Pool de threads Worker para Node.js que executa tarefas intensivas em CPU fora do event loop principal, com filas, cancelamento e estatísticas de execução.
Biblioteca C++ header-only para criar programas paralelos por tarefas usando grafos, com suporte a multithreading em CPU e GPUs CUDA.
Sistema baseado em PyTorch para treinamento e inferência distribuídos de grandes modelos de IA, com paralelismo, otimização de memória e treinamento heterogêneo.
Biblioteca de utilitários em Python puro, com mais de 230 recursos que ampliam a biblioteca padrão e sem dependências.
Um mecanismo de inferência PyTorch para Diffusion Transformers (DiTs) que adiciona cache, paralelismo, quantização e offload para CPU ao Diffusers.