Réactif, parallèle, asynchrone. Pourquoi!

775 vues

Publié le

My conference at USI 2014 (http://www.usievents.com/en). Explaining how we arrive to reactive programming, why we should care and what to do about it.

In French

Publié dans : Logiciels
  • Soyez le premier à commenter

Réactif, parallèle, asynchrone. Pourquoi!

  1. 1. www.usievents.com #USI2014 Réactif, Parallèle, Asynchrone Pourquoi! Henri Tremblay
  2. 2. www.usievents.com #USI2014 Henri Tremblay OCTO Technology Architecte Senior Responsable R&D Spécialiste Performance EasyMock lead developer Objenesis lead developer
  3. 3. www.usievents.com #USI2014 Philippe Prados OCTO Technology Responsable Pôle Réactif François-Xavier Bonnet OCTO Technology Architecte Senior Pôle Réactif Avec l’aide de
  4. 4. www.usievents.com #USI2014
  5. 5. www.usievents.com #USI2014 Un peu d’histoire Lisp (1958) Clojure (2007) Parallel.forEach (2010) Async IO (2006) Loi d’Amdahl (1967) Real-time (1965) Reactive (2012) 43 ans 49 ans 47 ans
  6. 6. www.usievents.com #USI2014
  7. 7. www.usievents.com #USI2014 x86
  8. 8. www.usievents.com #USI2014 ProcessusIN OUT x86
  9. 9. www.usievents.com #USI2014
  10. 10. www.usievents.com #USI2014 Cooperative Multitasking UNIX Mainframe Multiprogramming Je n’ai plus besoin du CPU. Je le tend à qui veut bien Je le prend. MerciProcessus 1 Processus 2 Je fais un IO, à qui le tour? Moi! Processus 1 Processus 2
  11. 11. www.usievents.com #USI2014 Windows 95 Preemptive Multitasking Processus 1, c’est à toi Chef oui chef Processus 1 Processus 2 Temps écoulé, processus 2 Aye aye sir Un IO, je t’enlève la main
  12. 12. www.usievents.com #USI2014 cgi-bin Requête HTTPD Processus Fork
  13. 13. www.usievents.com #USI2014 Java Green threads
  14. 14. www.usievents.com #USI2014 Native threads
  15. 15. www.usievents.com #USI2014 Résumé Architecture SMP OS Processus Thread
  16. 16. www.usievents.com #USI2014 Loi de Moore
  17. 17. www.usievents.com #USI2014 Synchronisé par défaut GC généraliste IO synchrone Threads créés au besoin UTF-16 «Un jour les ordinateurs seront assez puissants »
  18. 18. www.usievents.com #USI2014 Herb Sutter (2005)
  19. 19. www.usievents.com #USI2014 Loi de Moore
  20. 20. www.usievents.com #USI2014 Dual core (2007)
  21. 21. www.usievents.com #USI2014 Requêtes
  22. 22. www.usievents.com #USI2014 Le temps de réponse ne peut plus s’améliorer uniquement par le matériel
  23. 23. www.usievents.com #USI2014 Le temps de réponse ne peut plus s’améliorer uniquement par le matériel
  24. 24. www.usievents.com #USI2014
  25. 25. www.usievents.com #USI2014 Une requête Requête Op 1 Op 2 Op n… Réponse IO IO
  26. 26. www.usievents.com #USI2014 Une requête Op 1 IO Op 2 Context switching
  27. 27. www.usievents.com #USI2014 2 threads sur 1 CPU Thread 0 Thread 1 Overhead 1 seconde
  28. 28. www.usievents.com #USI2014 10 threads sur 1 CPU T0 Overheads T1 T2 T3 T4 T5 T6 T7 T8 T9 1 seconde
  29. 29. www.usievents.com #USI2014 Attente d’entrée-sortie Attente de récupération du CPU Overhead de context switching Perte de temps
  30. 30. www.usievents.com #USI2014
  31. 31. www.usievents.com #USI2014 Solution #1: Parallel processing Op 1 Op 2 Op 3
  32. 32. www.usievents.com #USI2014 Solution #2: NIO Op 1 IO Op 2Op 3
  33. 33. www.usievents.com #USI2014 Solution #3: 1 thread par CPU Op 1 Op 2 Op 3
  34. 34. www.usievents.com #USI2014 Complexité
  35. 35. www.usievents.com #USI2014 Oh my God! (1/2)
  36. 36. www.usievents.com #USI2014 Oh my God! (2/2)
  37. 37. www.usievents.com #USI2014
  38. 38. www.usievents.com #USI2014 En JavaScript Pas de multithreading Scalabilité en instanciant plusieurs processus Approche asynchrone NodeJS
  39. 39. www.usievents.com #USI2014 Implémentation de LISP du JVM Prône la programmation fonctionnelle et l’immutabilité Facilite le partage des données en mémoire via un STM Clojure
  40. 40. www.usievents.com #USI2014 Traitements multi-threadés isolés l’un de l’autre Partage explicite des données Utilisable facilement en Groovy et Java Vert.X
  41. 41. www.usievents.com #USI2014 Netty: Gestionnaire d’IO asynchrone sur JVM Play: Fullstack reactive Rx: Framework reactive sous .Net Java 8: Évaluation paresseuse Lambda Parallélisme Haskell, Erlang, Go, … Coroutine, Continuation, Promise Pilotes de DB asynchrones Autres
  42. 42. www.usievents.com #USI2014 Conclusion
  43. 43. www.usievents.com #USI2014 NIO Avantage Améliore sensiblement la scalabilité d’un serveur d’application Désavantage Doit être supporté par les frameworks Recommandation: Allez-y Je vais faire un IO, rappelle-moi quand c’est fini. En attendant je fais d’autre chose Processus 1 D’accord
  44. 44. www.usievents.com #USI2014 Parallèle Avantage Réduit les temps de réponse d’un système peu sollicité Maximise l’utilisation CPU Désavantage Algorithmie plus complexe Recommandation: Allez-y… au besoin Yep! Les gars, voici chacun un peu de boulot. Dites-moi quand c’est fini. Je vous attend Processus 1
  45. 45. www.usievents.com #USI2014 Fonctionnel Avantage Implicitement thread-safe Diminue la quantité de code Facilement parallélisable Évaluation paresseuse Désavantage Rapidement illisible si surutilisé Lecture du code plus complexe pour les non initiés Recommandation: Allez-y. Avec retenu Bien sûr Tu pourrais effectuer cette opération sur toutes ces données et me donner le résultat? Méthode 1 Méthode 2
  46. 46. www.usievents.com #USI2014 Immutable Avantage Élimine les risques de contention Facilite les traitements parallèles Désavantage Augmente le travail du GC Les structures de données doivent être compatible Recommandation: Allez-y, sans vous forcer Tout de suite Voici des données. Tu m’en donnes une copie en appliquant cette transformation? Méthode 1 Méthode 2
  47. 47. www.usievents.com #USI2014 Asynchrone Avantage Réduit les temps de réponse Meilleure exploitation des CPUs Désavantage Code plus complexe si utilisé extensivement Mais ça s’améliore par l’évolution des langages Recommandation: Allez-y en opportuniste Yep! Hop, toi fais ça, et hop toi fais ça. Dites-moi quand c’est fini Processus 1
  48. 48. www.usievents.com #USI2014
  49. 49. www.usievents.com #USI2014 ReactiveScalable Resilient Event Driven Responsive React to event React to failure React to users React to load
  50. 50. www.usievents.com #USI2014 http://perfug.github.io/ +Henri Tremblay @henri_tremblay htremblay@octo.com Questions?

×