SlideShare une entreprise Scribd logo
Vincent	
  Daubry	
  

                        •  CTO	
  Youboox	
  
                        •  @vdaubry	
  
                        •  iOS	
  et	
  RoR	
  
A quoi ça sert ?
  •  Gérer le multithreading, ne pas bloquer le main thread

  •  Cas d'usage numéro 1 : appels réseaux

  •  Article de Jeff Lamarche de 2010 qui déconseille l’utilisation de
     thread pour lancer des appels réseaux synchrone

  •  « This is Apple's polite way of saying "don't use threads for
     networking, you idiot". »




*	
  h;p://iphonedevelopment.blogspot.fr/2010/05/downloading-­‐images-­‐for-­‐table-­‐without.html	
  
   18/2/13                          Copyright © 2012 Youboox.fr | Design by Youboox           2
A quoi ça sert ?

Les frameworks « modernes » utilise des operations pour
faire les appels réseaux.



On utilise donc des appels assynchrone pour lancer… des
[NSURLConnection sendAsynchronousRequest] ?




18/2/13             Copyright © 2012 Youboox.fr | Design by Youboox   3
18/2/13   Copyright © 2012 Youboox.fr | Design by Youboox   4
A quoi ça sert ?
•  Il y a 2 raisons :

          La performance :
          « Event-driven code is more complex than code using blocking
          threads, but it delivers the highest network performance. »


          Mais surtout :

          –  Une queue permet un contrôle très fin sur les appels : priorité,
             dépendances, appels concurrents, etc




18/2/13                        Copyright © 2012 Youboox.fr | Design by Youboox   5
Un peu de théorie
•  Lancer des thread à la main est facile




•  Mais :
          –  Ce n’est pas scalable (gestion du CPU et de la mémoire)
          –  Pas adapté aux CPU multicoeurs


•  A réserver à des cas très particulier d’appli temps réels…

•  En conlusion : Please don’t do it.


18/2/13                       Copyright © 2012 Youboox.fr | Design by Youboox   6
Un peu de théorie

•  La bonne façon de faire est d’utiliser les queue fournit par le SDK :
   dispatch queue et operation queue

•  Dispatch queue (GCD) : approche bas niveau
•  Operation queue : approche haut niveau

•  Les operations sont des simple objets
•  On peut faire pleins de choses sympathiques avec ça




18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox   7
NSOperation
•  NSOperation : moyen recommandé de gérer les appels en tache de
   fond

•  Une operation est une sous-classe de NSOperation




18/2/13                Copyright © 2012 Youboox.fr | Design by Youboox   8
NSOperation
•  Une operation a une methode main




18/2/13                Copyright © 2012 Youboox.fr | Design by Youboox   9
NSOperationQueue
•  Une job queue : NSOperationQueue

•  Un simple array d’operation

•  Par défaut les operations sont exécutées dans l’ordre dès qu’on les
   ajoute à la queue




18/2/13                  Copyright © 2012 Youboox.fr | Design by Youboox   10
Dans la vrai vie : les blocks




C’est	
  tout	
  ;)	
  




18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox   11
Le sucre
•  La queue offre un contrôle très fin sur les operations :

          –  Choisir le nombre d'operations simultanées

          –  Priorité d’exécution des jobs

          –  Mettre en pause le démarrage de nouvelles operations

•  Une operation est KVO compliant :

          –  Etat du job (isCanceled , isConcurrent, isFinished)

          –  Completion block

•  Une operation peut avoir une liste d’operations dont elle dépend



18/2/13                          Copyright © 2012 Youboox.fr | Design by Youboox   12
AFNetworking

•  Chaque appel est une operation

•  Une queue pour lancer les operations

•  Chaque operation ouvre une connection assynchrone

•  Operations et blocks = callbacks




18/2/13                  Copyright © 2012 Youboox.fr | Design by Youboox   13
AFNetworking

•    Exemple : enqueueBatchOfHTTPRequestOperationsWithRequests

•    Pour chaque requête il y a un completion block (suivre l’avancement)

•    Chaque requête est ajouté comme une dépendance du batch




18/2/13                        Copyright © 2012 Youboox.fr | Design by Youboox   14
Attention au MainThread…
•  Penser à lancer vos opérations de mise à jour de l’interface sur le
   main thread !




18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox   15
Attention à la mémoire…

•  Chaque opération retient les objets qui sont alloués durant son
   exécution

•  Quand on définit des dépendances entre opérations la mémoire
   n’est libéré que lorsque toutes les opérations soient terminées




18/2/13                  Copyright © 2012 Youboox.fr | Design by Youboox   16
MKNetworkKit

•  Et si votre appli fait des appels long en tache de fond ? (ex:
   téléchargement)

•  3G = 2 connexions concurrentes max … (edge 1 connection)

•  La queue est placée dans un singleton, toute l'appli a accès les
   appels réseau

•  Permet de faire varier le nombre d'appels concurrent en fonction du
   reseau

•  Permet d'affecter un niveau de priorité aux appels



18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox   17
MKNetworkKit

•  La queue est en mémoire

•  On ne peut pas sérialiser un block (?)

•  Mais on peut serialiser une opération!

•  Pourquoi faire ?
          –  Exemple : Quand on perd le réseau les operations sont sauvés
             et executés quand on revient online




18/2/13                       Copyright © 2012 Youboox.fr | Design by Youboox   18
MKNetworkKit




18/2/13      Copyright © 2012 Youboox.fr | Design by Youboox   19
MKNetworkKit




18/2/13      Copyright © 2012 Youboox.fr | Design by Youboox   20

Contenu connexe

PPTX
Présentation iBeacon (cocoaheads toulouse)
PDF
CocoaHeads Rennes #5 : iOS & Android
PDF
Transition de NIBs/XIBs vers Storyboards
PDF
CocoaHeads Rennes #6
PDF
Presentation clean architecture
PDF
Hermes, génération et déploiement d'ipa by Peter Meuel
PDF
Introduction to WebRTC on iOS
PDF
Présentation SoLocal
Présentation iBeacon (cocoaheads toulouse)
CocoaHeads Rennes #5 : iOS & Android
Transition de NIBs/XIBs vers Storyboards
CocoaHeads Rennes #6
Presentation clean architecture
Hermes, génération et déploiement d'ipa by Peter Meuel
Introduction to WebRTC on iOS
Présentation SoLocal

Tendances (12)

PPTX
La sécurité sur iOS par Arnaud de Bock
PDF
BlaBlaCar - Going Native !
PDF
Tap publisher par Frédéric Aloé
PDF
L'intégration continue avec Bitrise
PDF
How javascript core helped PAW to move from a small app to an extensible tool
PDF
Test flight et les outils de distribution continue par simone civetta de xebia
KEY
Lab devtalk
PDF
Présentation retour d'experience sur l'application MyLittleParis
PDF
CocoaHeads Rennes #7 : Intégration continue pour les nuls
KEY
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
PDF
L’environnement du développement mobile iOS & Android
PDF
Plugins Xcode
La sécurité sur iOS par Arnaud de Bock
BlaBlaCar - Going Native !
Tap publisher par Frédéric Aloé
L'intégration continue avec Bitrise
How javascript core helped PAW to move from a small app to an extensible tool
Test flight et les outils de distribution continue par simone civetta de xebia
Lab devtalk
Présentation retour d'experience sur l'application MyLittleParis
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
L’environnement du développement mobile iOS & Android
Plugins Xcode
Publicité

Similaire à Ns operationqueue (20)

PDF
Systeme embarque
PPTX
.NET Microframework: du code, de l’électronique, de la robotique
PDF
Mender 2.0 101: Bien démarrer avec les 'update modules'
PPTX
Au cœur du Framework .NET 4.5.1
PPTX
Au coeur du framework .net 4.5.1
PPTX
Plongée au cœur du Framework .NET 4.5
PDF
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7
PPTX
2014.12.11 - TECH CONF #3 - Présentation Node.js
PPTX
Autour de Node.js - TechConf#3
PPTX
A la queue leu leu
PDF
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
PDF
Cours Devops Sparks.pptx.pdf
PPTX
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptx
PDF
Osis18_Cloud : Virtualisation efficace d’architectures NUMA
PDF
2024-09-26 - meetup DevOps Aix-Marseille
PDF
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle Rome
PPT
L'optimisation énergétique des datacenter
PDF
cours-VoIP12342555545454654867864545465.pdf
PPTX
Perfug BOF devoxx2017.pptx
PDF
Solutions temps réel sous linux
Systeme embarque
.NET Microframework: du code, de l’électronique, de la robotique
Mender 2.0 101: Bien démarrer avec les 'update modules'
Au cœur du Framework .NET 4.5.1
Au coeur du framework .net 4.5.1
Plongée au cœur du Framework .NET 4.5
Recueil des mauvaises pratiques constatées lors de l'audit de sites Drupal 7
2014.12.11 - TECH CONF #3 - Présentation Node.js
Autour de Node.js - TechConf#3
A la queue leu leu
Meet'up "Linux et Android dans les systèmes embarqués et les objets connectés"
Cours Devops Sparks.pptx.pdf
travaux-pratiques-m103-v1-0-2022-630dd67234da9.pptx
Osis18_Cloud : Virtualisation efficace d’architectures NUMA
2024-09-26 - meetup DevOps Aix-Marseille
IBM Technology Day 2013 IBM Smarter Computing Y. de Visme Salle Rome
L'optimisation énergétique des datacenter
cours-VoIP12342555545454654867864545465.pdf
Perfug BOF devoxx2017.pptx
Solutions temps réel sous linux
Publicité

Plus de CocoaHeads France (20)

PDF
Mutation testing for a safer Future
PDF
iOS App Group for Debugging
PDF
Asynchronous swift
PDF
Visual accessibility in iOS11
PDF
My script - One year of CocoaHeads
PDF
Ui testing dealing with push notifications
PDF
CONTINUOUS DELIVERY WITH FASTLANE
PDF
Super combinators
PDF
Design like a developer
PDF
Handle the error
PDF
Quoi de neuf dans iOS 10.3
PDF
IoT Best practices
PDF
SwiftyGPIO
PDF
Présentation de HomeKit
PDF
Programme MFI retour d'expérience
PDF
How to communicate with Smart things?
PDF
Build a lego app with CocoaPods
PDF
Let's migrate to Swift 3.0
PDF
Project Entourage
PDF
What's new in iOS9
Mutation testing for a safer Future
iOS App Group for Debugging
Asynchronous swift
Visual accessibility in iOS11
My script - One year of CocoaHeads
Ui testing dealing with push notifications
CONTINUOUS DELIVERY WITH FASTLANE
Super combinators
Design like a developer
Handle the error
Quoi de neuf dans iOS 10.3
IoT Best practices
SwiftyGPIO
Présentation de HomeKit
Programme MFI retour d'expérience
How to communicate with Smart things?
Build a lego app with CocoaPods
Let's migrate to Swift 3.0
Project Entourage
What's new in iOS9

Dernier (7)

PDF
presentation_with_intro_compressee IEEE EPS France
PDF
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
PDF
Tendances tech 2025 - SFEIR & WENVISION.pdf
PPTX
Presentation_Securite_Reseaux_Bac+2.pptx
PPTX
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
PDF
FORMATION EN Programmation En Langage C.pdf
PDF
Modems expliqués- votre passerelle vers Internet.pdf
presentation_with_intro_compressee IEEE EPS France
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
Tendances tech 2025 - SFEIR & WENVISION.pdf
Presentation_Securite_Reseaux_Bac+2.pptx
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
FORMATION EN Programmation En Langage C.pdf
Modems expliqués- votre passerelle vers Internet.pdf

Ns operationqueue

  • 1. Vincent  Daubry   •  CTO  Youboox   •  @vdaubry   •  iOS  et  RoR  
  • 2. A quoi ça sert ? •  Gérer le multithreading, ne pas bloquer le main thread •  Cas d'usage numéro 1 : appels réseaux •  Article de Jeff Lamarche de 2010 qui déconseille l’utilisation de thread pour lancer des appels réseaux synchrone •  « This is Apple's polite way of saying "don't use threads for networking, you idiot". » *  h;p://iphonedevelopment.blogspot.fr/2010/05/downloading-­‐images-­‐for-­‐table-­‐without.html   18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 2
  • 3. A quoi ça sert ? Les frameworks « modernes » utilise des operations pour faire les appels réseaux. On utilise donc des appels assynchrone pour lancer… des [NSURLConnection sendAsynchronousRequest] ? 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 3
  • 4. 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 4
  • 5. A quoi ça sert ? •  Il y a 2 raisons : La performance : « Event-driven code is more complex than code using blocking threads, but it delivers the highest network performance. » Mais surtout : –  Une queue permet un contrôle très fin sur les appels : priorité, dépendances, appels concurrents, etc 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 5
  • 6. Un peu de théorie •  Lancer des thread à la main est facile •  Mais : –  Ce n’est pas scalable (gestion du CPU et de la mémoire) –  Pas adapté aux CPU multicoeurs •  A réserver à des cas très particulier d’appli temps réels… •  En conlusion : Please don’t do it. 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 6
  • 7. Un peu de théorie •  La bonne façon de faire est d’utiliser les queue fournit par le SDK : dispatch queue et operation queue •  Dispatch queue (GCD) : approche bas niveau •  Operation queue : approche haut niveau •  Les operations sont des simple objets •  On peut faire pleins de choses sympathiques avec ça 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 7
  • 8. NSOperation •  NSOperation : moyen recommandé de gérer les appels en tache de fond •  Une operation est une sous-classe de NSOperation 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 8
  • 9. NSOperation •  Une operation a une methode main 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 9
  • 10. NSOperationQueue •  Une job queue : NSOperationQueue •  Un simple array d’operation •  Par défaut les operations sont exécutées dans l’ordre dès qu’on les ajoute à la queue 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 10
  • 11. Dans la vrai vie : les blocks C’est  tout  ;)   18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 11
  • 12. Le sucre •  La queue offre un contrôle très fin sur les operations : –  Choisir le nombre d'operations simultanées –  Priorité d’exécution des jobs –  Mettre en pause le démarrage de nouvelles operations •  Une operation est KVO compliant : –  Etat du job (isCanceled , isConcurrent, isFinished) –  Completion block •  Une operation peut avoir une liste d’operations dont elle dépend 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 12
  • 13. AFNetworking •  Chaque appel est une operation •  Une queue pour lancer les operations •  Chaque operation ouvre une connection assynchrone •  Operations et blocks = callbacks 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 13
  • 14. AFNetworking •  Exemple : enqueueBatchOfHTTPRequestOperationsWithRequests •  Pour chaque requête il y a un completion block (suivre l’avancement) •  Chaque requête est ajouté comme une dépendance du batch 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 14
  • 15. Attention au MainThread… •  Penser à lancer vos opérations de mise à jour de l’interface sur le main thread ! 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 15
  • 16. Attention à la mémoire… •  Chaque opération retient les objets qui sont alloués durant son exécution •  Quand on définit des dépendances entre opérations la mémoire n’est libéré que lorsque toutes les opérations soient terminées 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 16
  • 17. MKNetworkKit •  Et si votre appli fait des appels long en tache de fond ? (ex: téléchargement) •  3G = 2 connexions concurrentes max … (edge 1 connection) •  La queue est placée dans un singleton, toute l'appli a accès les appels réseau •  Permet de faire varier le nombre d'appels concurrent en fonction du reseau •  Permet d'affecter un niveau de priorité aux appels 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 17
  • 18. MKNetworkKit •  La queue est en mémoire •  On ne peut pas sérialiser un block (?) •  Mais on peut serialiser une opération! •  Pourquoi faire ? –  Exemple : Quand on perd le réseau les operations sont sauvés et executés quand on revient online 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 18
  • 19. MKNetworkKit 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 19
  • 20. MKNetworkKit 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 20