SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Multi-Threading
             Et
         Cocoa
             1ère Partie
    Avant l’architecture
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
Motivation, le pourquoi


Système hôte et application
Architecture d’une application
évènementielle
Les limites, les problèmes
Propositions
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
Architecture d’une application évènementielle




     Une boucle infinie
     Un ensemble d’entrées sorties
     Des Apis Graphiques ou autres
Architecture d’une application évènementielle




     Une boucle infinie
     Un ensemble d’entrées sorties
     Des mécanisme périodiques
Les limites, les problèmes




Une seule séquence d’instruction
Une tâche à la fois
La roue colorée...
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
Plan d’ensemble, le comment



Une application, plusieurs Threads
Une illustration SVP
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)
Illustration
Mémoire   Code   Pile    Registres   Code   Pile   Registres   Code   Pile   Registres
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
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 ... )
Granularité



A quel moment une instruction est elle
exécuté et interrompue ?
a_ = b+c
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
Communication entre threads




  Transmettre des résultats
  Transmettre des ordres
Et Cocoa dans tout ça...



RunLoop & InputSource
NSLock & @synchronized
NSRecusiveLock
NSConditionLock
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
RunLoop & InputSource
Avec une démo SVP




La démo...

Contenu connexe

Tendances

Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureCocoaHeads France
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeadsRNS
 
Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGWilliam Marques
 
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetCocoaHeads France
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScriptfelixbillon
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentationCocoaHeads France
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads France
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeadsRNS
 
5 android web_service
5 android web_service5 android web_service
5 android web_serviceSaber LAJILI
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
 
Présentation de Carthage par Simone Civetta
Présentation de Carthage par Simone CivettaPrésentation de Carthage par Simone Civetta
Présentation de Carthage par Simone CivettaCocoaHeads France
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2Samy Dindane
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_threadSaber LAJILI
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeadsRNS
 

Tendances (20)

iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume Faure
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
 
Angular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUGAngular + JHipster @ Paris JUG
Angular + JHipster @ Paris JUG
 
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey Bocquet
 
Xcode 4.5
Xcode 4.5Xcode 4.5
Xcode 4.5
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScript
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentation
 
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrenteCocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6
 
5 android web_service
5 android web_service5 android web_service
5 android web_service
 
3D Touch
3D Touch3D Touch
3D Touch
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
 
Présentation de Carthage par Simone Civetta
Présentation de Carthage par Simone CivettaPrésentation de Carthage par Simone Civetta
Présentation de Carthage par Simone Civetta
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
 
Javavs net
Javavs netJavavs net
Javavs net
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par Celedev
 

En vedette

La programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIXLa programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIXBen Hassen Hamdi
 
Cours java avance avancé thread arraylist
Cours java avance avancé thread arraylistCours java avance avancé thread arraylist
Cours java avance avancé thread arraylistHoussem Hamrouni
 
Amina 2010 workshop slides final version
Amina 2010 workshop slides final versionAmina 2010 workshop slides final version
Amina 2010 workshop slides final versionRMwebsite
 

En vedette (8)

La programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIXLa programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIX
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Cours java avance avancé thread arraylist
Cours java avance avancé thread arraylistCours java avance avancé thread arraylist
Cours java avance avancé thread arraylist
 
Débutez Html5 et css3
Débutez Html5 et css3Débutez Html5 et css3
Débutez Html5 et css3
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
Amina 2010 workshop slides final version
Amina 2010 workshop slides final versionAmina 2010 workshop slides final version
Amina 2010 workshop slides final version
 
les Threads
les  Threadsles  Threads
les Threads
 
Chap7 java net
Chap7 java netChap7 java net
Chap7 java net
 

Similaire à Multi-Threading Et Cocoa

DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisantcluelessjoe
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tousMicrosoft
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingIppon
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computingJulien Dubois
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingNormandy JUG
 
.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotiqueMicrosoft
 
Les micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkLes micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkMSDEVMTL
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs Microsoft
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Arnaud Auroux
 
Grid Computing avec Symphony
Grid Computing avec SymphonyGrid Computing avec Symphony
Grid Computing avec SymphonyIn Fine
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelleAssociation Agile Nantes
 
retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2Saad Tazi
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharpSDFG5
 
Entity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesEntity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesMSDEVMTL
 
Techdays azure pour les développeurs
Techdays azure pour les développeursTechdays azure pour les développeurs
Techdays azure pour les développeursAymeric Weinbach
 
Windows Azure: le cloud pour les développeurs
Windows Azure: le cloud pour les développeursWindows Azure: le cloud pour les développeurs
Windows Azure: le cloud pour les développeursMicrosoft
 

Similaire à Multi-Threading Et Cocoa (20)

DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 
.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous.NET Microframework, les joies de l'électronique et du code pour tous
.NET Microframework, les joies de l'électronique et du code pour tous
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computing
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
 
Les micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkLes micro orm, alternatives à entity framework
Les micro orm, alternatives à entity framework
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
 
Grid Computing avec Symphony
Grid Computing avec SymphonyGrid Computing avec Symphony
Grid Computing avec Symphony
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 
Presentation forum php 2010
Presentation forum php 2010Presentation forum php 2010
Presentation forum php 2010
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2retour sur confoo2011 et Symfony2
retour sur confoo2011 et Symfony2
 
Dotnet csharp
Dotnet csharpDotnet csharp
Dotnet csharp
 
Entity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesEntity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performances
 
Techdays azure pour les développeurs
Techdays azure pour les développeursTechdays azure pour les développeurs
Techdays azure pour les développeurs
 
Windows Azure: le cloud pour les développeurs
Windows Azure: le cloud pour les développeursWindows Azure: le cloud pour les développeurs
Windows Azure: le cloud pour les développeurs
 

Plus de CocoaHeads France

Plus de CocoaHeads France (20)

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer Future
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for Debugging
 
Asynchronous swift
Asynchronous swiftAsynchronous swift
Asynchronous swift
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11
 
My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeads
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 

Multi-Threading Et Cocoa

  • 1. Multi-Threading Et Cocoa 1ère Partie Avant l’architecture
  • 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
  • 6. Architecture d’une application évènementielle Une boucle infinie Un ensemble d’entrées sorties Des mécanisme périodiques
  • 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)
  • 11. Illustration Mémoire Code Pile Registres Code Pile Registres Code Pile Registres
  • 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 ... )
  • 14. Granularité A quel moment une instruction est elle exécuté et interrompue ? a_ = b+c
  • 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
  • 16. Communication entre threads Transmettre des résultats Transmettre des ordres
  • 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
  • 20. Avec une démo SVP La démo...