À retenir
- Peut être mise en pause (suspendue) et reprise plus tard.
- Conserve ses variables internes et son état entre chaque pause.
- Permet de faire du multitâche sur un seul processeur de façon fluide.
Une coroutine est une fonction capable d'interrompre son exécution pour laisser la place à d'autres tâches, avant de reprendre exactement là où elle s'était arrêtée. Contrairement à une fonction classique qui s'exécute d'une traite jusqu'au bout, imaginez un cuisinier qui lance la cuisson d'un gâteau et, au lieu d'attendre devant le four, profite de ce temps pour préparer le glaçage avant de revenir sortir le plat dès que la sonnerie retentit.
Étymologie
Le mot est composé du préfixe co- (signifiant ensemble ou mutuel) et de routine (un synonyme informatique de fonction). Il a été inventé par Melvin Conway en 1963 pour décrire des morceaux de code qui collaborent de manière égale, plutôt que de suivre une hiérarchie stricte de type « chef et subordonné ».
Exemples d'usage
- En Python, l'utilisation des mots-clés
asyncetawaitpour télécharger plusieurs fichiers simultanément sans bloquer le logiciel. - Dans le moteur de jeu Unity, pour animer un personnage sur plusieurs secondes sans arrêter le calcul du reste du monde.
- En JavaScript, pour effectuer une requête à une base de données tout en permettant à l'utilisateur de continuer à cliquer sur l'interface.
Cas d'usage
On les utilise principalement pour la programmation asynchrone. Elles sont indispensables quand un programme doit gérer de nombreuses attentes (réseau, lecture de fichiers, saisie utilisateur) sans gaspiller de ressources ou « geler » l'affichage. On les retrouve massivement dans le développement web, les serveurs haute performance et le jeu vidéo.
Bonnes pratiques
Il est important de ne pas placer de calculs trop lourds et longs à l'intérieur d'une coroutine sans faire de pauses explicites, car cela risquerait de bloquer tout le programme. Il faut également veiller à bien gérer les erreurs (exceptions) pour éviter que le programme ne reste « suspendu » indéfiniment en cas de problème réseau.
Synonymes
Antonymes
Conseil
Pour bien comprendre les coroutines, voyez-les comme des marque-pages dans un livre : vous pouvez fermer le livre, faire autre chose, et revenir exactement à la même ligne. C'est la base de la syntaxe moderne async/await que vous rencontrerez dans presque tous les langages actuels.
Questions fréquentes
Quelle est la différence avec un thread (fil d'exécution) ?
Un thread est géré par le système d'exploitation et peut s'arrêter n'importe quand de force (préemptif), alors qu'une coroutine décide elle-même quand elle passe la main (coopératif), ce qui est beaucoup plus léger en mémoire.
Est-ce que ça rend mon code plus rapide ?
Pas forcément en vitesse de calcul brute, mais cela permet au programme d'être beaucoup plus réactif et de traiter plus de demandes en même temps en évitant les temps morts.