Cours 4 : Multi-threading-Utiliser des threads : la classe Thread et l'interface Runnable- Pas un cours système donc pas de gestion de partage des ressources, de la concurrence,...Attention : Transparents à TROUS….F. Gayral 1Rappel : multi-tâches multi-tâches : exécution de plusieurs processus simultanément (Windows NT, Unix...). Un processus est un programme en cours d'exécution . L’ordonnanceur distribue le temps CPU entre les processus Un processus peut être dans différents états. En exécution (running) : a le processeur Prêt : le processus est prêt à s'exécuter, mais n'a pas le processeur (celui-ci est occupé par un autre processus en exécution) Bloqué : en attente de ressource ou en sommeil F. Gayral 2états d’un processus et transitionsUn processus passe de l’état 'en Un processus passe de exécution' à l’état 'Bloqué' : l’état 'En exécution' à ' - S'il reçoit l'ordre de dormir l’état 'Prêt' s'il a épuisé - s’il a besoin d’une ressource non son quantumdisponibleUn processus passe de l’état 'Prêt' à 'En exécution' si l'ordonnanceur lui donne la mainUn processus passe de l’état 'Bloqué à' l’état 'Prêt' :- Si son temps de sommeil est épuisé- Si la ressource qu’il attendait F. Gayral 3s’est libéréeRappel : multi-threads Un thread ("processus léger") est un processus à l'intérieur d'un processus. multi-threading : exécution à l’intérieur d’un processus de plusieurs sous-tâches (exécution concurrente de threads) ...
-Utiliser des threads: la classe Thread et l'interface Runnable
- Pas un cours système donc pas de gestion de partage des ressources, de la concurrence,...
Attention : Transparents à TROUS….
F. Gayral
1
Rappel : multi-tâches
processus
multi-tâches: exécution de plusieurs simultanément (Windows NT, Unix...). Un processus est unprogramme en cours d'exécution. distribue le temps CPU entre les processusL’ordonnanceur
Un processus peut être dans différents états.
Enexécution(running) : a le processeur
Prêt: le processus est prêt à s'exécuter, mais n'a pas le
processeur (celui-ci est occupé par un autre processus en
exécution)
+
Blo ué: en attente de ressource ou en sommeil qF. Gayral
Un thread ("processus léger") est un processus à l'intérieur d'un processus.
multi-threading: exécution à l’intérieur d’un processus de plusieurs sous-tâches (exécution concurrente de threads)
Un processus peut posséder plusieurs threads.
ressources allouées à un processus (temps processeur, Les mémoire) sont partagées entre les threads qui le composent.
Un processus possède au moins un thread de manière à exécuter le point d'entrée du programme. Ce thread exécute le programme principal, habituellement la fonctionmain().
F. Gayral
4
sreopprsurle,eriomélepiqusl'ipneatratneg
Les threads issus d’un même processus partagent la même la même pile et le même espace mémoire, ce qui rend très facile (et périlleux !) la communication entre threads.
5
F. Gayral
Différences entre thread et processus
Au niveau de la mémoire
Les sous-processus issus d’un même processus ont leur
propre espacem
pas avec les autres :
=> pour communiquer, ils doivent utiliser des moyens de communication spécifiques (tubes..)Les threads issus d’un même processu
Intérêts des threads en général
Communication très simple grâce aux données partagées
Partager le temps alloué au processus père entre plusieurs threads, chacun d’eux exécutant une fonction précise
Augmenter la "productivité" d’une application par l'exécution concurrente de ces threads
F. Gayral
6
Exemples
Un navigateurest un logiciel multi-thread : le chargement d'une page laisse la main à l'utilisateur
Un serveurrépondre à des demandes de connexions depeut clients en créant un thread par client
Le lancement de la machine virtuelle javalance un processus, de base, qui contient plusieurs threads :
principal celui qui exécute votre code à partir du mainle thread
le thread dédié au garbage : il a une priorité faible et ne s’active que lorsque le processeur n’est pas chargé ou lorsque la mémoire manque
F. Gayral
7
Threads : attention
On ne peut jamais prévoir l'ordre dans lequel les threads recevront l'accès au processeur
=> Deux lignes consécutives de code ne seront pas forcément effectuées à la suite car le contrôle du processeur pourra être passé à d'autres threads entre les deux.
Une application multithread ne doit jamais tenter de prévoir l'ordre d'exécution des instructions mais devra souvent utiliser les fonctions de synchronisation Une thread inactif ne devra jamai
Une thread inactif ne devra jamais monopoliser inutilement le processeur
F. Gayral
8
Threads et interface graphique
Swing possède une boucle principale pour la gestion des événements et la gestion des composants
Cette boucle est exécutée dans un thread séparé appelé « event dispatching thread »
Ce thread est lancé automatiquement
F. Gayral
9
Intérêt des threads pour une application
La programmeur crée des threads lorsque : l ’application nécessite d’exécuter une tâche longue et consommatrice de temps ou fait une tâche répétitive ou fait de l'animation Exemple : animation, gros calculs, attente de connexion, entrée/sortie (chargement d'images, sauvegarde de fichiers,…)
+
ÞCréer des threads chargés de ces tâches plutôt que d’occuper le thread principal à ces tâches
F. Gayral
10
Threads en java
En Java, les threads font partie intégrante du langage:
La classeThread
Lceerfa’intRunnable
Les programmes utilisant des threads sont portables d’une plate-forme à l’autre mais l’exécution peut varier (comportement de l’ordonnanceur non spécifié par Sun)