r/alexandretrotel · u/alexandretrotel ·

Futures, streams, sinks et exécuteurs en Rust, le même concept que les promesses en JavaScript

Futures, streams, sinks et exécuteurs en Rust, le même concept que les promesses en JavaScript

Cette vidéo explique les mécanismes d'asynchronisme en Rust, en les comparant aux Promises de JavaScript. L'élément central est le Future, qui représente une opération non bloquante. Contrairement à une valeur immédiate, un Future expose une méthode poll qui vérifie son état : soit il est en attente, soit il est prêt avec une valeur. Ce concept s'étend aux Streams, qui sont des séries de valeurs produites dans le temps (comme un flux de données), et aux Sinks, qui servent à envoyer ces données vers des canaux ou sockets via la méthode start_send. Enfin, un Exécuteur (ou runtime) est nécessaire pour gérer ces opérations asynchrones. Il utilise un pool de threads pour planifier régulièrement l'appel à poll sur les Futures, permettant ainsi de traiter plusieurs tâches sans bloquer le système. En résumé, Rust offre une infrastructure robuste où les Futures gèrent l'attente, les Streams gèrent les flux, les Sinks gèrent l'envoi, et l'Exécuteur orchestre le tout via le multi-threading.

Exemple : Imaginez une application qui lit des données d'un fichier ligne par ligne. Au lieu de bloquer l'attente de chaque ligne, on crée un Stream. L'exécuteur appelle poll_next sur ce Stream. Si la ligne n'est pas encore disponible, il revient plus tard. Dès que la ligne est prête, la valeur est renvoyée. Cela permet de traiter d'autres tâches en parallèle, contrairement à une lecture synchrone qui figerait l'application.