TGViewer
Rust Rust @rust_lib · 2.24K subscribers
Post #323 1.74K
🥷 Кража во спасение: Work Stealing в Tokio

Если вы используете tokio::main, вы запускаете многопоточный рантайм (Multi-Threaded Scheduler). Под капотом создается пул потоков (воркеров), обычно по числу ядер процессора.

Как честно распределить 100,000 задач между 8 потоками, чтобы никто не простаивал и не было узкого горлышка (bottleneck)?

Если сделать одну Глобальную очередь (Global Queue), куда смотрят все потоки, они передерутся за Мьютекс (Mutex contention). Производительность рухнет.

Поэтому Tokio использует Локальные очереди (Local Queues):

1. У каждого потока-воркера есть своя личная очередь задач (до 256 штук).

2. Воркер берет задачи только из своей очереди. Никаких блокировок! Это невероятно быстро.

3. Новые задачи, порожденные текущей (tokio::spawn), падают в локальную очередь этого же потока.

А что если один поток закончил все задачи, а у другого их еще 200?
Включается Work Stealing (Кража работы):

1. Скучающий воркер смотрит в локальные очереди других потоков.

2. Он находит самую загруженную очередь и втихаря "крадет" ровно половину её задач.

3. Забирает их себе в локальную очередь и начинает молотить.

Это гениальный компромисс: 99% времени потоки работают без блокировок, и лишь изредка (при перекосе баланса) происходит синхронизация для кражи. Именно поэтому Tokio выдерживает миллионы RPS на мощных серверах.

#rust #tokio #architecture #multithreading #work_stealing

👉 @rust_lib
  • 🔥 20
  • 👍 3
  • ❤ 1
  • 🥰 1
  • 🤗 1
More from @rust_lib
  1. Sep 24, 2026🥶 Холодный расчет: #[cold] и likely Компилятор Rust (LLVM) очень умный, но иногда мы знае…
  2. Sep 21, 2026🔮 Ты не пройдешь: Магия предсказателя ветвлений Вы когда-нибудь задумывались, почему обра…
  3. Sep 17, 2026🗝 Турбируем HashMap Стандартный std::collections::HashMap в Rust использует алгоритм хэши…
  4. Sep 16, 2026⚡️ Забудь про RefCell для примитивов Вам нужно изменить поле внутри неизменяемой структуры…
  5. Sep 15, 2026Создание кроссплатформенного приложения с GUI на Rust: От идеи до реальности Electron-прил…
  6. Sep 11, 2026Почему Vec::new() это ловушка для производительности. 📈 Векторный рост: Избегаем реаллока…
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 →