PriorityQueue - Rust #006 - async/await
Dans cette vidéo, on transforme notre PriorityQueue équitable -- jusque-là entièrement synchrone -- en une version asynchrone, pilotée par Tokio, tout en conservant exactement le même cœur algorithmique.
Au programme
- Comprendre pourquoi le modèle asynchrone est indispensable quand un système passe son temps à attendre (I/O, timers, réseau)
- Différence fondamentale entre threads (préemptifs) et tâches (coopératives)
- Comment async et await fonctionnent réellement : futures, suspension et rôle du runtime
- Pourquoi les primitives synchrones (Condvar, Mutex bloquant) ne peuvent pas être utilisées en async
- Les trois briques qui remplacent une Condvar :
- Semaphore (compteur d'items disponibles)
- Notify (événement ponctuel : file devenue vide)
- CancellationToken (arrêt global best-effort)
- Structure interne : séparation entre AsyncState (état logique pur) et AsyncInner (outils Tokio)
- Implémentation des méthodes : enqueue(), dequeue() avec tokio::select!, try_dequeue()
Notre file de priorité devient asynchrone, équitable, non bloquante et parfaitement maîtrisée, prête à être intégrée dans des architectures distribuées ou hautement concurrentes.
Liens utiles
Code source : github.com/xigh/pq-async-rs