Thread et asynchronicité
Technologie web 2
Johan Girod
Synchrone ou asynchrone
Execution synchrone
- Chaque tache est exécutées l'une après l'autre
- Le déroulé est bloqué tant qu'une tache n'est pas terminée
Synchrone ou asynchrone
Execution asynchrone
- Plusieurs tâches peuvent être lancées en même temps
- Elles ne bloquent pas le déroulé, et d'autres événements peuvent être traités
Synchrone ou asynchrone
Quelques exemples
- Une conversation téléphonique ? synchrone
- Une conversation par messagerie ? asynchrone
- Un paiement à la caisse ? synchrone
- Une préparation de repas ? asynchrone
Quelques exemples
Code synchrone ou asynchrone ?
Quelques exemples
Code synchrone ou asynchrone ?
Quelques exemples
Code synchrone ou asynchrone ?
Quelques exemples
Code synchrone ou asynchrone ?
Qu'est-ce qu'un thread ?
- Un thread est un fil d'exécution
- Un programme peut avoir plusieurs threads
- Chaque thread ne peut exécuter qu'une instruction à la fois
Thread et JavaScript
- Un programme JavaScript est executé dans un unique thread principal (« main
thread »)
Les instructions sont exécutées l'une après l'autre - Ce thread est non bloquant (asynchrone)
Les instructions asynchrones ne bloquent pas le déroulé et sont exécutées en parallèle - Les fonctions fonction de callback sont placées dans la file d'attente (« event loop ») Elles sont exécutées dès que le thread principal est disponible, dans l'ordre d'arrivée
`setTimeout`
Le code est exécuté dans l'ordre A, D, C, B
`setTimeout`
Le code est exécuté dans l'ordre B, C, D, A
Perfomance
Si on effectue une tâche longue dans le thread principal, cela peut bloquer l'interface
utilisateur, car les événements ne sont plus traités
Dans ce cas, il vaut mieux effectuer la tâche dans un autre thread : c'est le rôle des Web
Workers
Callback hell
Lorsqu'on imbrique trop de fonctions de rappel, le code devient illisible
Pour cela, il existe une fonctionnalité du langage : les promesse et les fonctions async/await
...que vous verrez l'année prochaine
TP 5 : Balatro simplifié
Créer une version simplifiée du jeu de cartes Balatro en JavaScript, où le but est de former les meilleures combinaisons de poker possible.
Principes du jeu
- Le joueur reçoit une main de 5 cartes piochées aléatoirement dans un deck de 52 cartes standard.
- À chaque manche, le joueur dispose de 3 échanges pour améliorer sa main en remplaçant des cartes individuelles.
- Une fois satisfait de sa main (ou après avoir utilisé tous ses échanges), le joueur valide sa main et un score est calculé en fonction de la combinaison de poker obtenue.
- Les combinaisons reconnues sont (du plus faible au plus fort) :
- Paire (5 points) : deux cartes de même valeur
- Double Paire (10 points) : deux paires différentes
- Brelan (15 points) : trois cartes de même valeur
- Suite (25 points) : cinq cartes consécutives
- Couleur (30 points) : cinq cartes de la même couleur (♠, ♥, ♦, ♣)
- Full (40 points) : un brelan + une paire
- Carré (60 points) : quatre cartes de même valeur
- Quinte Flush (100 points) : une suite de la même couleur
- Le score total s’accumule au fil des manches.
Partie 1 : le moteur de jeu
Wip