Thread et coroutines

Bonjour,

je suis en train de continuer ma formation kotlin et je suis tombé sur les coroutines et les threads. Je suis perdu je ne sais vraiment pas ce que sont des coroutines et threads. Pouvez vous s’il vous plait m’aider à mieux comprendre ces concepts?

  • Qu’est ce que des coroutines?
  • A quoi servent ils?

Merci les amis.

Effectivement les notions de tâches asynchrones (threads, coroutines, etc.) sont souvent complexes à appréhender.
C’est d’ailleurs difficile à expliquer en texte dans un forum comme tu peux l’imaginer :slight_smile:
Le principe consiste à lancer un fil d’exécution secondaire qui s’exécute en parallèle de ton fil d’exécution principal.
Je ne sais pas si tu as accès aux cours iOS en plus du cours Android, mais si tu veux j’ai pris le temps de l’expliquer en vidéo justement. C’est sur le dernier cours iOS (https://www.purplegiraffe.fr/courses/1065367/lectures/24020526) mais le principe est similaire sur Android)

1 J'aime

J’avais prévu de publier un extrait de cours sur Youtube cette semaine, et cette vidéo est pas mal pour ça. Du coup voici le lien :

Edit : Lien corrigé.

1 J'aime

Je vais te donner un exemple réel. Il y a quelques années, j’ai participé à un MOOC universitaire sur la programmation iOS en Swift. Pour être crédité d’un certificat, il fallait réaliser un exercice, un petit jeu où un vaisseau spatial devait éviter des astéroïdes.

Comme je n’aime jamais faire les choses comme tout le monde, j’ai inversé les paramètres, imaginant un jeu où le joueur incarne le Doctor Who (un alien geek), détruisant des envahisseurs interdimensionnels venant d’un autre univers. Une sorte de mélange entre Space Invader et le film Pixel.

A chaque contact d’un univers avec le sol, la structure de l’univers change localement. Au delà d’un certain seuil, la barrière entre les univers s’effondre et c’est la ruée pour le casse-croûte. J’ai voulu visualiser la dégradation de l’univers par un effet de pixellisation de l’environnement.

L’image de fond du jeu était une superbe image de New York en haute résolution. L’idée était de pixelliser progressivement l’image, au fil de jeu, jusqu’au Game Over. Techniquement, cela ne pose pas de problème. C’est facile à programmer. Par contre, je ne suis pas arrivé à le faire rapidement. La pixellisation d’une image prenait trop de temps, ce qui ralentissait le jeu, et créait du laaaagggggguuue !

J’ai finalement laissé tomber l’image, utilisant un filtre rouge pour symboliser la dégradation de New York sous les attaques Aliens. C’est moins sympathique qu’une pixellisation, mais c’étais suffisamment rapide pour ne pas ralentir l’affichage. J’ai rendu l’exercice comme ça, le temps étant limité …

Quelques semaines plus tard, j’ai eu l’idée d’utiliser un thread pour pixelliser l’image en tâche de fond, sans ralentir le jeu et sans créer de lags …

Chaque fois que la nouvelle version du jeu avait besoin de pixelliser l’image de fond, il créait un thread secondaire qui s’occupait de la tâche tranquillement, en utilisant le temps disponible du CPU, sans gêner le déroulement de l’application. Quand l’image était prête, le thread envoyait une notification signalant au jeu « ok c’est bon, tu peux afficher la nouvelle image en fond d’écran ».

Voilà ce qu’on peux faire avec un thread et une coroutine : exécuter des traitements longs, sans ralentir l’application.

2 J'aimes