Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

818 views

Published on

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

Published in: Software
  • Be the first to comment

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?

×