Vincent	  Daubry	                          •  CTO	  Youboox	                          •  @vdaubry	                        ...
A quoi ça sert ?  •  Gérer le multithreading, ne pas bloquer le main thread  •  Cas dusage numéro 1 : appels réseaux  •  A...
A quoi ça sert ?Les frameworks « modernes » utilise des operations pourfaire les appels réseaux.On utilise donc des appels...
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 usi...
Un peu de théorie•  Lancer des thread à la main est facile•  Mais :          –  Ce n’est pas scalable (gestion du CPU et d...
Un peu de théorie•  La bonne façon de faire est d’utiliser les queue fournit par le SDK :   dispatch queue et operation qu...
NSOperation•  NSOperation : moyen recommandé de gérer les appels en tache de   fond•  Une operation est une sous-classe de...
NSOperation•  Une operation a une methode main18/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é...
Dans la vrai vie : les blocksC’est	  tout	  ;)	  18/2/13                   Copyright © 2012 Youboox.fr | Design by Youboox...
Le sucre•  La queue offre un contrôle très fin sur les operations :          –  Choisir le nombre doperations simultanées ...
AFNetworking•  Chaque appel est une operation•  Une queue pour lancer les operations•  Chaque operation ouvre une connecti...
AFNetworking•    Exemple : enqueueBatchOfHTTPRequestOperationsWithRequests•    Pour chaque requête il y a un completion bl...
Attention au MainThread…•  Penser à lancer vos opérations de mise à jour de l’interface sur le   main thread !18/2/13     ...
Attention à la mémoire…•  Chaque opération retient les objets qui sont alloués durant son   exécution•  Quand on définit d...
MKNetworkKit•  Et si votre appli fait des appels long en tache de fond ? (ex:   téléchargement)•  3G = 2 connexions concur...
MKNetworkKit•  La queue est en mémoire•  On ne peut pas sérialiser un block (?)•  Mais on peut serialiser une opération!• ...
MKNetworkKit18/2/13      Copyright © 2012 Youboox.fr | Design by Youboox   19
MKNetworkKit18/2/13      Copyright © 2012 Youboox.fr | Design by Youboox   20
Prochain SlideShare
Chargement dans…5
×

Ns operationqueue

3 190 vues

Publié le

Publié dans : Technologie
  • Soyez le premier à commenter

Ns operationqueue

  1. 1. Vincent  Daubry   •  CTO  Youboox   •  @vdaubry   •  iOS  et  RoR  
  2. 2. A quoi ça sert ? •  Gérer le multithreading, ne pas bloquer le main thread •  Cas dusage 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 Apples polite way of saying "dont 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. 3. A quoi ça sert ?Les frameworks « modernes » utilise des operations pourfaire 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. 4. 18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 4
  5. 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, etc18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 5
  6. 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. 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 ça18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 7
  8. 8. NSOperation•  NSOperation : moyen recommandé de gérer les appels en tache de fond•  Une operation est une sous-classe de NSOperation18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 8
  9. 9. NSOperation•  Une operation a une methode main18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 9
  10. 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 queue18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 10
  11. 11. Dans la vrai vie : les blocksC’est  tout  ;)  18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 11
  12. 12. Le sucre•  La queue offre un contrôle très fin sur les operations : –  Choisir le nombre doperations 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épend18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 12
  13. 13. AFNetworking•  Chaque appel est une operation•  Une queue pour lancer les operations•  Chaque operation ouvre une connection assynchrone•  Operations et blocks = callbacks18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 13
  14. 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 batch18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 14
  15. 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. 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ées18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 16
  17. 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 lappli a accès les appels réseau•  Permet de faire varier le nombre dappels concurrent en fonction du reseau•  Permet daffecter un niveau de priorité aux appels18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 17
  18. 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 online18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 18
  19. 19. MKNetworkKit18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 19
  20. 20. MKNetworkKit18/2/13 Copyright © 2012 Youboox.fr | Design by Youboox 20

×