# Крейт дня: Rayon - параллельные вычисления в одну строку

> Разбираем легендарный крейт Rayon: как замена всего одной строчки .iter() на .par_iter() распараллеливает вычисления по всем ядрам процессора с балансировкой Work-Stealing.

- **URL:** https://eagle2000.space/rust/crate-of-the-day-rayon/
- **Date:** 2026-08-15

- **Tags:** rust, crate-of-the-day, concurrency, performance

---
{{< lead >}}
Рубрика «Крейт дня» — краткий разбор популярных (и не очень) библиотек экосистемы Rust, которые экономят сотни часов разработки.
{{< /lead >}}

Сегодня в рубрике — **`rayon`** (один из самых популярных и изящных крейтов в мире Rust).

### 🛠 Проблема, которую он решает

Допустим у вас есть огромный массив из 10 000 000 элементов и вам нужно применить к каждому элементу тяжелую операцию.

В обычном Rust вы пишете стандартный итератор:

```rust
let results: Vec<_> = data.iter()
    .map(|x| heavy_computation(x))
    .collect();
```

Этот код выполняется строго в **один поток**. Если у вас 16-ядерный процессор, 15 ядер будут просто простаивать.

Писать параллельность вручную через `thread::spawn`, `Arc<Mutex<T>>` и каналы - дольше, а также можно допустить ошибки во владении памятью.

---

### 🚀 Решение через Rayon

С крейтом `rayon` всё распараллеливание сводится к замене **всего одного метода**:

```rust
use rayon::prelude::*; // 1. Импортируем типажи Rayon

// 2. Меняем .iter() на .par_iter()
let results: Vec<_> = data.par_iter()
    .map(|x| heavy_computation(x))
    .collect();
```

---

### 💡 За что Rayon любят разработчики?

1. **Алгоритм Work-Stealing:** Rayon автоматически создаст пулл потоков под количество ядер вашего процессора. Если один поток закончил свою порцию работы быстрее других, он не ждет, а «крадет» незавершенные задачи из очереди соседей.
2. **Гарантии безопасности типов:** Благодарю типажам `Send` и `Sync`, если ваша функция или тип данных не являются поток-безопасными, компилятор Rust просто не даст вызвать `.par_iter()`.

🔗 **Репозиторий на GitHub:** [rayon-rs/rayon](https://github.com/rayon-rs/rayon)  
📦 **Crates.io:** [crates.io/crates/rayon](https://crates.io/crates/rayon)

