Title: Informatique T4 (FSAC1450) Concurrence et Syst
1Informatique T4 (FSAC1450)Concurrence
etSystèmes Multi-Agents
- Peter Van Roy
- Département dIngénierie Informatique, UCL
- pvr_at_info.ucl.ac.be
2Annonce
- Il y aura en supplément un cours officieux fait
par deux étudiants/moniteurs - Lundi 22 novembre de 16h15 à 18h15 en BA94
- Une initiative de Damien Saucez et Anh Tuan Tang
Mac, vous pouvez les remercier! - Venez nombreux pour poser toutes les questions
que vous nosez pas poser à moi! - Loccasion ou jamais pour éliminer le flou dans
vos pensées
3Consignes pour lexamen
- Lexamen sera de 2h30, à livre fermé
- Il y aura une division égale entre théorie et
pratique - Attention à la précision pour la théorie (voir le
livre!) - Attention à la syntaxe pour la pratique!
- Il y aura une question théorique sur la
sémantique - Où vous devez faire lexécution dun programme
sans sombrer dans les détails - La matière est tout ce qui a été vu dans les
cours magistraux et les séances pratiques - Les notes ne seront pas sur une courbe
- Jespère vous pouvoir donner tous de bonnes notes
4Ce quon va voir aujourdhui
- Un exercice de sémantique
- La motivation pour la concurrence
- Lexécution dataflow
- La manière la plus simple de faire la concurrence
- Les flots de données
- Les systèmes multi-agents
- Producteur/consommateur
- Pipeline (comme dans Unix!)
- Réflections sur le cours Informatique T4
5Parties du livre pour aujourdhui
- Concurrence, dataflow, nondéterminisme
- 1.10, 1.11, 1.15
- Threads, dataflow
- 4.2.1, 4.2.2, 4.2.3
- Flots et agents
- 4.3.1, 4.3.2
6Exercice de sémantique
7Lénoncé
- Quel est létat à la fin de lexécution delocal
MakeBumper B Y in fun MakeBumper
CNewCell 0 in fun C_at_C1 _at_C
end end BMakeBumper YBend - Montrez quelques pas dexécution représentatifs
8Traduction partielleen langage noyau
- local MakeBumper B Y in proc MakeBumper R
CNewCell 0 in Rproc K C_at_C1
K_at_C end end MakeBumper B B Yend
s1
s2
Solution au tableau
9Létat final
Une cellule
- ( , mp1, bp2, y1, cx, i0, cy )
- avec
- p1(proc R CNewCell 0 in end, )
- p2(proc K C_at_C1 K_at_C end, C c)
10Motivation pour la concurrence
11Le monde est concurrent!
- Le monde réel est concurrent
- Il est fait dactivités qui évoluent de façon
indépendante - Le monde informatique est concurrent aussi
- Système réparti ordinateurs liés par un réseau
- Une activité concurrente sappelle un ordinateur
- Système dexploitation dun ordinateur
- Une activité concurrente sappelle un processus
- Parfois, plusieurs fenêtres dans une application
- Typiquement, dans les browsers Web!
- Une activité concurrente sappelle un thread
12La programmation concurrente
- La concurrence est naturelle
- Deux activités indépendantes sont concurrentes!
- Quest-ce quon fait si on veut faire un
programme qui fait deux activités indépendantes? - La concurrence doit être soutenu par les langages
de programmation - Un programme concurrent
- Plusieurs activités exécutent simultanément
- Les activités peuvent communiquer et synchroniser
- Communiquer information passe dune activité à
une autre - Synchroniser une activité attend une autre
13Exécution dataflow
14Exécution dataflow
- Il y a trois manières principales de programmer
avec la concurrence - La manière la plus simple sappelle lexécution
dataflow ou concurrence déclarative - Cest ce quon va voir aujourdhui
- Il y a deux autres manières principales
- Concurrence par envoi de messages
- Toujours assez simple
- Concurrence par état partagé
- Beaucoup plus compliquée!
- Malheureusement, cest ce que fait Java -(
15Une variable libre
- Une variable libre est créée en mémoire mais
nest pas encore affectée à une valeur - Quest-ce qui se passe si on essaie de faire une
opération avec une variable libre?local X Y
in YX1 Browse Yend - Quest-ce qui se passe?
- Rien! Lexécution attend juste avant laddition.
16Quoi faire avec une variable non-initialisée?
- Différents langages font des choses différentes
- En C, laddition continue mais X contient une
valeur au hasard (contenu de la mémoire) - En Java, laddition continue avec 0 comme valeur
pour X (si X est lattribut dun objet) - En Prolog, lexécution sarrête avec une erreur
- En Java, il y a une détection derreur par le
compilateur (si X est une variable locale) - En Oz, lexécution attend juste avant laddition
et peut continuer quand X est lié - Dans la programmation par contraintes, laddition
YX1 est ajoutée à lensemble de contraintes
et lexécution continue! (voir cours
Programmation par Contraintes)
17Faire continuer lexécution
- Linstruction qui attenddeclare Xlocal Y
in YX1 Browse Yend - Si quelquun dautre pourrait lier X, alors
lexécution pourrait continuer! - Mais qui peut le faire?
- Réponse une autre activité concurrente!
- Si une autre activité fait X20
- Alors laddition continuera et on affichera 21!
- Cela sappelle de lexécution dataflow
18Lexécution dataflow
YX1
Browse Y
Progrès de lactivité A
(1)
X20
Progrès de lactivité B
- Lactivité A attend sagement au point (1) juste
avant laddition - Quand lactivité B fait X20, alors lactivité A
continue - Si lactivité B fait X20 avant que lactivité A
narrive au point (1), alors lactivité A
nattendra pas du tout
19Threads
20Threads
- Une activité est une séquence dinstructions en
exécution - On appelle cela un thread
- Chaque thread est indépendant des autres
- Entre deux threads il ny a pas dordre
- Le système garantit que chaque thread reçoit une
partie équitable de la capacité de calcul du
processeur - Deux threads peuvent communiquer sils partagent
des variables - Par exemple, la variable qui correspond à X dans
lexemple quon vient de voir
21La création des threads
- En Oz, la création dun thread est simple
- On peut exécuter nimporte quelle instruction ltsgt
dans un nouveau thread thread ltsgt end - Par exemple declare X thread Browse X1
end thread X1 end - Quest-ce que fait ce fragment de programme?
- Il y a plusieurs exécutions possibles, mais elles
arrivent toutes au même résultat tôt ou tard, on
affichera 2!
22Un petit programme (1)
- Voici un petit programme avec des
threads declare X0 X1 X2 X3 thread X11X0
end thread X3X1X2 end Browse X0 X1 X2 X3 - Le Browser affiche X0 X1 X2 X3
- Les variables ne sont pas encore affectées
- Le Browser utilise aussi le dataflow quand une
variable est affectée, laffichage est mis à jour
23Un petit programme (2)
- Voici un petit programme avec des
threads declare X0 X1 X2 X3 thread X11X0
end thread X3X1X2 end Browse X0 X1 X2 X3 - Les deux threads attendent
- X11X0 attend (X0 nest pas affectée)
- X3X1X2 attend (X1 et X2 ne sont pas affectées)
24Un petit programme (3)
- Voici un petit programme avec des
threads declare X0 X1 X2 X3 thread X11X0
end thread X3X1X2 end Browse X0 X1 X2 X3 - Nous faisons une affectation
- Faites X04
25Un petit programme (4)
- Voici un petit programme avec des
threads declare X0 X1 X2 X3 thread X11X0
end thread X3X1X2 end Browse X0 X1 X2 X3 - Nous faisons une affectation
- Faites X04
- Le premier thread peut exécuter, il fait X15
- Le Browser montre 4 5 X2 X3
26Un petit programme (5)
- Voici un petit programme avec des
threads declare X0 X1 X2 X3 thread X11X0 end
thread terminé thread X3X1X2 end Browse
X0 X1 X2 X3 - Le second thread attend toujours
- Parce que X2 nest toujours pas affecté
27Un petit programme (6)
- Voici un petit programme avec des
threads declare X0 X1 X2 X3 thread X11X0 end
thread terminé thread X3X1X2 end Browse
X0 X1 X2 X3 - Nous faisons une autre affectation
- Faites X27
- Le second thread peut exécuter, il fait X312
- Le Browser montre 4 5 7 12
28Le Browser est concurrent
- Le Browser exécute avec ses propres threads
- Pour chaque variable libre, il y a un thread dans
le Browser qui attend sur cette variable - Quand la variable est affectée, laffichage est
mis à jour - Attention cela ne marche pas avec les cellules!
- Le Browser ne regarde pas le contenu dune
cellule
29Nondéterminisme (1)
- Quest-ce que fait le programme suivant? declare
X thread X1 end thread X2 end - Lordre dexécution des deux threads nest pas
déterminé - X sera lié à 1 ou à 2, on ne sait pas à quelle
valeur - Lautre thread aura une erreur
- On ne peut pas affecter une variable deux fois
- Cette incertitude sappelle le nondéterminisme
30Nondéterminisme (2)
- Quest-ce que fait le programme suivant? declare
XNewCell 0 thread X1 end thread X2 end - Lordre dexécution des deux threads nest pas
déterminé - La cellule X sera affectée à une valeur, puis à
lautre - Quand les deux threads sont terminés, X aura le
contenu 1 ou 2, on ne sait pas quelle valeur - Cette incertitude sappelle le nondéterminisme
31Nondéterminisme (3)
- En général, il faut éviter le nondéterminisme
- Ce nest pas facile en général
- Cest assez compliqué si on mélange les threads
et les cellules - Malheureusement, dans beaucoup de langages cest
comme ça -( - Mais le modèle déclaratif a un avantage
- Le modèle déclaratif na pas de nondéterminisme
(sauf sil y a une erreur comme dans lexemple
précédent)
32Flots et agents
33Flot (stream)
- Un flot (stream) est une liste dont lextrémité
est une variable non-liée - SabcdS2
- En général, un flot ne se terminera jamais par
nil, mais sera toujours étendu avec des éléments - Un flot peut servir comme un canal de
communication entre deux threads - Le premier thread ajoute des éléments au flot
- Le second thread lit le flot
34Exemple dun flot
- Voici un programme qui affiche tous les éléments
dun flotproc Disp S case S of XS2 then
Browse X Disp S2 endenddeclare Sthread
Disp S end - On ajoute des éléments au flot declare S2 in
SabcS2 declare S3 in S2defS3 - Essayez par vous-même!
35Producteur/consommateur (1)
- Un producteur génère un flot de données fun
Prod N Delay 1000 NProd N1 end - Le Delay 1000 ralentit lexécution pour quon
puisse voir! - Un consommateur lit le flot et fait quelque chose
(comme la procédure Disp) - Un programme producteur/consommateur declare
S thread SProd 1 end thread Disp S end
36Producteur/consommateur (2)
Agent P
Agent C
S1234
thread SProd 1 end
thread Disp S end
- Chaque cercle est une activité concurrente avec
un (ou plusieurs) canaux de communication - On appelle ça aussi un agent
- Les agents communiquent par le flot S
- Le premier thread crée le flot, le second le lit
37Pipeline (1)
- On peut ajouter dautres agents entre P et C
- Voici un transformateur qui modifie le flot fun
Trans S case S of XS2 then XXTrans S2
end end - Voici un programme avec trois agents declare S1
S2 thread S1Prod 1 end thread S2Trans S1
end thread Disp S2 end
38Pipeline (2)
Agent P
Agent C
Agent T
S1123
S2149
thread S1Prod 1 end
thread Disp S2 end
thread S2Trans S1 end
- Nous avons maintenant créé trois agents
- Le producteur crée le flot S1
- Le transformateur lit S1 et crée S2
- Le consommateur lit S2
- La technique du pipeline est très utile!
- Par exemple, il est omniprésent en Unix
39Résumé
40Résumé
- Concurrence
- Activités qui évoluent de façon indépendante
- Exécution dataflow avec variables libres
- Nondéterminisme
- Thread
- Pour modéliser une activité dans le langage
- Une séquence dinstructions en exécution
- Flot
- Une liste dont lextrémité est une variable libre
- Un canal de communication entre agents
- Agent
- Un thread avec un ou plusieurs canaux de
communication - Programme multi-agent producteur/consommateur,
pipeline
41Réflectionssur Informatique T4
42Le monde selon InfoT4
- Dans ce cours nous avons vu quelques des concepts
les plus importants dans la programmation - Nous avons vu quelques paradigmes de
programmation - Programmation déclarative (fonctionnelle stricte)
- Programmation avec état
- Programmation orienté-objet
- Programmation concurrente avec dataflow
- Programmation multi-agent
- Il y a beaucoup dautres paradigmes intéressants
43Paradigmes de programmation
Programmation déclarative Programmation
fonctionnelle stricte, Scheme, ML Programmation
logique déterministe concurrence
synchronisation selon besoin Concurrence
dataflow Progr. fonctionnelle paresseuse,
Haskell choix nondéterministe Progr.
logique concurrente traitement
dexceptions état explicite
Programmation orienté-objet, Java, C
recherche Pr. logique nondéterministe,
Prolog
OOP concurrente (envoi de messages,
Erlang, E) (état partagé, Java) espaces de
calcul Programmation par contraintes
- Ce schéma donne un résumé des différents
paradigmes avec les relations entre eux - Chaque paradigme a ses avantages et désavantages
et un domaine où il est le meilleur
44La coexistence des paradigmes
- Chaque paradigme a sa place
- Avec plus de concepts on peut exprimer plus, mais
le raisonnement devient plus compliqué - Avec moins de concepts on peut satisfaire des
conditions dutilisation plus stricte - Plus nest pas mieux (ou pire) que moins, mais
simplement différent - Dans vos programmes, je vous conseille de bien
réfléchir et de choisir le paradigme approprié
45- Fin du cours
- Jespère que ce survol rapide
- de la programmation vous a plu
- Bonne chance pour lexamen!