TGViewer
Rust Rust @rust_code · 8.91K subscribers
Post #1332 4.54K
Частая дилемма в Rust: Tokio отлично подходит для async I/O, Rayon для тяжёлых CPU-задач. Но как связать их так, чтобы не заблокировать async runtime? 🦀

Команда Tantivy, поискового движка на Rust, показала, как решила это в продакшене.

Проблема:

Tokio-задачи не должны блокироваться. Тяжёлая CPU-работа может подвесить весь async runtime.

Rayon-потоки не понимают async. Внутри rayon thread нельзя просто взять и сделать .await.

Передать результат обратно между этими мирами тоже не так очевидно.

Решение - мост через `oneshot`-канал.

Tokio запускает задачу и ждёт результат из oneshot.

Rayon выполняет CPU-работу в своём пуле потоков.

Когда работа завершена, Rayon отправляет результат обратно через канал.

Tokio продолжает выполнение, при этом executor всё это время не блокировался.

Очень полезный паттерн для всех, кто пишет async-код на Rust.

🔗 reddit.com/r/rust/comments/1ulo7pr
  • 👍 35
  • ❤ 12
  • 🔥 10
More from @rust_code
  1. Sep 20, 2026Zero cost
  2. Sep 19, 2026🦀 NVIDIA официально идёт в native GPU programming на Rust Теперь CUDA Rust позволяет писа…
  3. Sep 18, 2026yagni
  4. Sep 17, 2026🦀 Rust Pinning без магии: `Pin`, `Unpin` и `Future::poll` Одна из самых сложных тем в Rus…
  5. Sep 17, 2026Участвуй во всероссийском ИТ-чемпионате МТС True Tech Champ 2026 c призовой фондом 10 250…
  6. Sep 17, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →