Набор инструментов для конкурентного программирования на Rust: lock-free очереди, deques с work stealing, каналы, epoch-based GC, атомики и scoped-потоки.
rayon-rs/rayon
Библиотека для параллельной обработки данных в Rust: переводит последовательные итераторы в параллельные с минимальными изменениями API.
- Звёзды
- 13,399
- Форки
- 618
- Открытые issues
- 233
- Последний коммит
- 2 месяца назад
Что это?
Rayon — библиотека для параллельной обработки данных в Rust. Основной интерфейс библиотеки — параллельный итератор — позволяет превратить последовательное вычисление в параллельное, заменив, например, вызов iter() на par_iter(). Rayon сам распределяет работу по задачам и подстраивает это распределение для максимальной производительности.
Для более точного контроля Rayon предоставляет функции join и scope, с помощью которых можно вручную создавать параллельные задачи, а также позволяет использовать собственные пулы потоков вместо глобального пула по умолчанию. API библиотеки гарантирует отсутствие гонок данных, поэтому скомпилировавшийся код в целом ведёт себя так же, как при последовательном выполнении. Параллельные итераторы дают те же результаты, что и последовательные аналоги, однако побочные эффекты — например, отправка сообщений в канал или запись на диск — могут происходить в другом порядке.
Rayon опубликован на crates.io и требует rustc версии 1.85 или новее. В WebAssembly по умолчанию используется последовательный обход; для многопоточности там нужен адаптер, например wasm-bindgen-rayon.
Ключевые возможности
- 01Преобразует последовательные итераторы в параллельные с минимальным изменением, например заменой iter() на par_iter().
- 02Предоставляет функции join и scope для ручного создания параллельных задач.
- 03Поддерживает собственные пулы потоков в дополнение к глобальному пулу по умолчанию.
- 04API библиотеки разработан так, чтобы гарантировать отсутствие гонок данных.
- 05Предоставляет параллельные версии некоторых методов последовательных итераторов.
Сценарии использования
- Ускорение циклов с высокой нагрузкой на CPU при обработке больших коллекций в приложениях на Rust.
- Параллельное выполнение преобразований данных, таких как map, filter и sum, для срезов или векторов.
- Создание собственных задач с параллельным выполнением с помощью join, scope или выделенных пулов потоков.
- Запуск кода на Rust с многопоточностью в браузере с помощью wasm-bindgen-rayon.
Быстрый старт
- 1
Добавьте Rayon в зависимости Cargo.toml
[dependencies] rayon = "1.12" - 2
Подключите трейты параллельных итераторов в каждом модуле
use rayon::prelude::*; - 3
Замените foo.iter() на foo.par_iter(), чтобы выполнять итерацию параллельно
Что важно знать
- Требуется rustc версии 1.85.0 или новее.
- В WebAssembly используется последовательная итерация, если не добавить отдельно адаптер wasm-bindgen-rayon и его конфигурацию.
Темы
Частые вопросы
- Что такое rayon?
- Библиотека для параллельной обработки данных в Rust: переводит последовательные итераторы в параллельные с минимальными изменениями API. Rayon — библиотека для параллельной обработки данных в Rust. Основной интерфейс библиотеки — параллельный итератор — позволяет превратить последовательное вычисление в параллельное, заменив, например, вызов iter() на par_iter(). Rayon сам распределяет работу по задачам и подстраивает это распределение для максимальной производительности.
- rayon можно использовать бесплатно? Какая у него лицензия?
- rayon распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- rayon всё ещё поддерживается?
- Обновлялся за последние 6 месяцев. Последний коммит в rayon — 28 авг. 2026 г..
- Для чего можно использовать rayon?
- Ускорение циклов с высокой нагрузкой на CPU при обработке больших коллекций в приложениях на Rust. Параллельное выполнение преобразований данных, таких как map, filter и sum, для срезов или векторов. Создание собственных задач с параллельным выполнением с помощью join, scope или выделенных пулов потоков. Запуск кода на Rust с многопоточностью в браузере с помощью wasm-bindgen-rayon.
- Как установить rayon?
- Добавьте Rayon в зависимости Cargo.toml: [dependencies] rayon = "1.12" Подключите трейты параллельных итераторов в каждом модуле: use rayon::prelude::*; Замените foo.iter() на foo.par_iter(), чтобы выполнять итерацию параллельно
- Где скачать rayon?
- Исходный код и инструкции по установке — на GitHub: https://github.com/rayon-rs/rayon
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Пул потоков-воркеров для Node.js, который выносит ресурсоёмкие вычисления из основного цикла событий и поддерживает очереди, отмену задач и статистику выполнения.
Header-only библиотека C++ для написания параллельных программ на основе графов задач с поддержкой многопоточности на CPU и вычислений на GPU через CUDA.
Система на базе PyTorch для распределённого обучения и инференса крупных AI-моделей с поддержкой параллелизма, оптимизации памяти и гетерогенного обучения.
Библиотека из более чем 230 утилит на чистом Python, расширяющих стандартную библиотеку и не имеющих внешних зависимостей.
PyTorch-движок инференса для Diffusion Transformers (DiT), который ускоряет работу Diffusers за счёт кэширования, параллелизма, квантования и выгрузки на CPU.