2. Plan
Motivation, le pourquoi
Plan d’ensemble, le comment
Mise en oeuvre, l’enfer est dans le détail
Et Cocoa dans tout ça...
Avec une démo SVP
3. Motivation, le pourquoi
Système hôte et application
Architecture d’une application
évènementielle
Les limites, les problèmes
Propositions
4. Système hôte et application
Un système qui est l'ordonnanceur
Des applications avec leur propres
espace mémoire
Un système de communication inter-
application
5. Architecture d’une application évènementielle
Une boucle infinie
Un ensemble d’entrées sorties
Des Apis Graphiques ou autres
7. Les limites, les problèmes
Une seule séquence d’instruction
Une tâche à la fois
La roue colorée...
8. Propositions
Faire accomplir les tâches lourdes par
des applications autres et communiquer
avec
Découper les tâches en petites parties
peu coûteuses
Passer à autre chose... plus adapté au
niveau de l’architecture applicative
9. Plan d’ensemble, le comment
Une application, plusieurs Threads
Une illustration SVP
10. Une application, plusieurs threads
Une thread principale... le main()
Plusieurs séquences de code simultanées
Sauvegarde de contexte...
instruction courante
registres
et d’autres... trucs (google est votre
ami)
12. Mise en oeuvre, l’enfer est dans le détail
Un seul espace mémoire à partager
Granularité
Protéger les données
Communication entre les threads
13. Un seul espace mémoire à partager
Deux threads veulent accéder à la
même valeur en mémoire
Variables locales
TLS : Thread Local Storage
Resources globales (fichiers, sous
process, pipes, e/s ... )
15. Protéger les données
Section de code que l’on appelle
critique
Instruction atomique
Garantir qu’une opération de lecture ou d’écriture
ne puisse être interrompue pour passer à un autre
thread
Locks divers et variés
Conditions
17. Et Cocoa dans tout ça...
RunLoop & InputSource
NSLock & @synchronized
NSRecusiveLock
NSConditionLock
18. RunLoop & InputSource
Une boucle infinie pour attendre que quelque
chose se passe sans consommer de ressources
CPU
Des points d’entrées pour indiquer qu’il y a
quelque chose à faire...
E/S
Messages ObjC
Spécifiques
Timers