Académique Documents
Professionnel Documents
Culture Documents
4
Programme : Quelques définitions
5
Un processus
6
Les états d’un processus
8
Un Thread
9
Un Thread
On qualifie aussi les fils d’exécution de «processus légers» car leur création
s’avère beaucoup plus rapide que celle d’un processus normal. En effet, comme
ils s’exécutent dans un espace d’adresses existant, aucune opération d’allocation
d’espace ni de chargement de code n’est requise.
Il suffit de leur allouer un bloc de contrôle (descripteur) et quelques autres
ressources indispensables telles que la pile et l’amas (données dynamiques).
10
Un Thread
11
Thread & Processus
12
Avantages des Threads
• Partage des ressources système
• Gérer l’exécution de traitements long sans bloquer les autres (Calculs, affichage, programmes démons)
• Permettre l’annulation de tâches indépendantes
• Lancer plusieurs exécutions du même code simultanément sur des données différentes
• Répondre à plusieurs requêtes en même sur un serveur
• Traiter deux flux sonores en parallèle
• Simuler le parallélisme nécessaire à certaines classes d’applications
• Exploiter la structure multiprocesseur des ordinateurs modernes
• Nécessaire dans certains API
13
Terminologie
Système multitâche
Un système multitâche, c'est la possibilité d’avoir plusieurs programmes
travaillant en même temps: impression de parallélisme du point de vue de
l’utilisateur.
14
Terminologie
15
Terminologie
16
Terminologie
Multithreading / multitâche
Un programme qui exécute plusieurs threads en même temps est appelé
programme multithread ou encore multithreadé.
17
Terminologie
La pile (stack)
Structure de données fondée sur le principe « dernier arrivé, premier sorti ».
Stockage des données de travail.
Le tas(heap)
Le tas est une zone où est réalisée l’allocation dynamique.
18
Terminologie
Ordonnanceur
L’ordonnanceur est un composant du système d'exploitation qui choisit l'ordre
d'exécution des processus. En anglais, l'ordonnanceur est appelé scheduler.
19
Notion de concurrence
21
Programmation parallèle
1. Programmation parallèle
Exécution d’un programme sur plusieurs unités (Cores, processeurs, ordinateurs)
2. Programmation distribué ou répartie
C’est la répartition de l’exécution d’un programme sur plusieurs machines distinctes
Programmation parallèle sur plusieurs machines
3. Programmation concurrente
Style de programmation prenant en compte les différentes unités d’exécutions offertes :
Thread, Processus...
22
Synchronisation : Compétition
Nous avons deux tâches (A et B) et une variable partagée (TOTAL)
La tâche A doit additionner 1 à TOTAL
La tâche B doit multiplier TOTAL par 2
Chaque tâche accomplit son opération en utilisant le processus suivant :
• Chercher la valeur dans TOTAL
• Effectuer l’opération arithmétique
• Remettre la nouvelle valeur dans TOTAL
23
Synchronisation : Compétition
• Sans synchronisation, 4 valeurs peuvent résulter de l’exécution des deux tâches :
• Si A s’accomplit avant que B ne commence ) TOTAL=8
• Si A et B cherchent le TOTAL avant que l’un ou l’autre remette la nouvelle valeur, alors :
• Si A remet la nouvelle valeur dans TOTAL en premier ) TOTAL=6
• Si B remet la nouvelle valeur dans TOTAL en premier ) TOTAL=4
• Ce genre de situation s’appelle un état de course parce plusieurs tâches font la course
pour utiliser les ressources partagées et le résultat dépend de l’ordre de l’exécution des
tâches.
24
Synchronisation : Coopération
• Le programme 1 produit des données ; Le
programme 2 utilise ces données
• La synchronisation est nécessaire :
• L’unité du consommateur ne doit pas prendre des
données si la mémoire partagée (mémoire tampon) est
vide ;
• L’unité du producteur ne peut pas placer de nouvelles
données dans la mémoire partagée si elle n’est pas vide.
25
Multiple Threads dans une application
• Chaque Thread possède sa file d’exécution privée
• Si deux Threads exécutent la même méthode, chacun aura sa copie des variables
locales que la méthode utilise.
• Cependant, tous les Thread voient la même mémoire dynamique
• Deux Threads peuvent agir sur le même objet et les mêmes champs 𝑠𝑡𝑎𝑡𝑖𝑐
simultanément
• Inconvénients
• Gestion des problèmes de synchronisation
• Débogage difficile
26
Exemple
Considérons le processus suivant :
Si 𝑥=0 et 𝑦=7 initialement alors 𝑥=1 et 𝑦=5 après exécution de 𝛼 et 𝛽 quelque
soit l’ordre.
27
Exemple
• L’indépendance des actions est cruciale, par exemple pour
𝑥≔𝑥+1|||𝑥≔2.𝑥 avec 𝑥0=0, la valeur de 𝑥 dépend de l’ordre d’exécution
• Nous sommes dans le cas d’une communication avec 𝑥 comme variable
partagée
• Nous verrons la communication avec variables partagées dans la suite du
cours
28
Comment travailler sans les threads
• Il est possible de travailler qu’avec les processus !
• La duplication est coûteuse car il faut recopier le tas et les registres
• L’échange des données est plus complexe.
29
Pourquoi travailler avec des threads ?
Avec plusieurs processeurs, il est possible de réaliser plus de calcul à chaque
instant,
Parallélisation des algorithmes (si possible), acquisition des données,
Simplification de la structure logiciel (chaque fonctionnalité est gérée par un
thread),
Architecture plus robuste (une partie de l’application ne met plus en péril
tout le reste),
Tâche de surveillance en parallèle d’une tâche de traitement,
30
Pourquoi travailler avec des threads ?
L’OS n’a pas besoin de créer de nouveau emplacement dans la mémoire
comme dans le cas des processus,
L’OS n'a pas besoin également d'allouer de nouvelles structures pour assurer
le suivi de l'état des fichiers ouverts et incrémenter le nombre de références
sur les descripteurs de fichiers ouverts,
31
Pourquoi travailler avec des threads ?
Il est trivial de partager des données entre les threads . Les mêmes variables
globales et statiques peuvent être lues et écrites entre tous les threads d'un
processus. Avec un processus mono-thread , le système d'exploitation ne
peut rien faire pour faire laisser le processus tirer parti de plusieurs
processeurs,
L'ordonnanceur peut programmer différents threads pour une exécution en
parallèle sur différents cœurs de processeurs.
32
Bibliographie
• [Hartley 1998] S. J . Hartley. Concurent Programming: Th,e Java
Prograrrinzinq Languuge. Oxford, New York, NY, 1998.
• [Farley 1998]J. Farley. Java Distributed Computing. O’Reilly, Sebastopol,
CA, 1998.
• [Lead 1999]D. Lea. Concurrent Programming in Java: Design principles
and Putterns. The Java Series. Addison Wesley, Reading, MA, 2nd edition,
1999.
33