SlideShare une entreprise Scribd logo
1  sur  50
www.usievents.com #USI2014
Réactif, Parallèle, Asynchrone
Pourquoi!
Henri Tremblay
www.usievents.com #USI2014
Henri Tremblay
OCTO Technology
Architecte Senior
Responsable R&D
Spécialiste Performance
EasyMock lead developer
Objenesis lead developer
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
www.usievents.com #USI2014
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
www.usievents.com #USI2014
www.usievents.com #USI2014
x86
www.usievents.com #USI2014
ProcessusIN OUT
x86
www.usievents.com #USI2014
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
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
www.usievents.com #USI2014
cgi-bin
Requête
HTTPD Processus
Fork
www.usievents.com #USI2014
Java
Green threads
www.usievents.com #USI2014
Native threads
www.usievents.com #USI2014
Résumé
Architecture SMP
OS
Processus
Thread
www.usievents.com #USI2014
Loi de Moore
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 »
www.usievents.com #USI2014
Herb Sutter (2005)
www.usievents.com #USI2014
Loi de Moore
www.usievents.com #USI2014
Dual core (2007)
www.usievents.com #USI2014
Requêtes
www.usievents.com #USI2014
Le temps de réponse
ne peut plus
s’améliorer
uniquement par le
matériel
www.usievents.com #USI2014
Le temps de réponse
ne peut plus
s’améliorer
uniquement par le
matériel
www.usievents.com #USI2014
www.usievents.com #USI2014
Une requête
Requête
Op 1 Op 2 Op n…
Réponse
IO IO
www.usievents.com #USI2014
Une requête
Op 1
IO
Op 2
Context switching
www.usievents.com #USI2014
2 threads sur 1 CPU
Thread 0 Thread 1
Overhead
1 seconde
www.usievents.com #USI2014
10 threads sur 1 CPU
T0
Overheads
T1 T2 T3 T4 T5 T6 T7 T8 T9
1 seconde
www.usievents.com #USI2014
Attente d’entrée-sortie
Attente de récupération du CPU
Overhead de context switching
Perte de temps
www.usievents.com #USI2014
www.usievents.com #USI2014
Solution #1: Parallel processing
Op 1
Op 2
Op 3
www.usievents.com #USI2014
Solution #2: NIO
Op 1
IO
Op 2Op 3
www.usievents.com #USI2014
Solution #3: 1 thread par CPU
Op 1 Op 2 Op 3
www.usievents.com #USI2014
Complexité
www.usievents.com #USI2014
Oh my God! (1/2)
www.usievents.com #USI2014
Oh my God! (2/2)
www.usievents.com #USI2014
www.usievents.com #USI2014
En JavaScript
Pas de multithreading
Scalabilité en instanciant plusieurs processus
Approche asynchrone
NodeJS
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
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
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
www.usievents.com #USI2014
Conclusion
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
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
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
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
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
www.usievents.com #USI2014
www.usievents.com #USI2014
ReactiveScalable Resilient
Event
Driven
Responsive
React to event
React to failure
React to users
React to load
www.usievents.com #USI2014
http://perfug.github.io/
+Henri Tremblay
@henri_tremblay
htremblay@octo.com
Questions?

Contenu connexe

En vedette

Jeudis du Libre - MySQL InnoDB Cluster
Jeudis du Libre - MySQL InnoDB ClusterJeudis du Libre - MySQL InnoDB Cluster
Jeudis du Libre - MySQL InnoDB ClusterFrederic Descamps
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensionswyggio
 
BackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingBackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingPublicis Sapient Engineering
 
Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...
Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...
Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...Publicis Sapient Engineering
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piadelegue
 
Mandature legislative 2007 2012
Mandature legislative 2007 2012Mandature legislative 2007 2012
Mandature legislative 2007 2012lafontaine
 
Faire forced choices
Faire forced choicesFaire forced choices
Faire forced choicesbottejan
 
Du côté du cdi 22 27avril
Du côté du cdi 22 27avrilDu côté du cdi 22 27avril
Du côté du cdi 22 27avrilClaudie Merlet
 
Du côté du cdi 27 8juin
Du côté du cdi 27 8juinDu côté du cdi 27 8juin
Du côté du cdi 27 8juinClaudie Merlet
 
Pour l'être aimer By Shany
Pour l'être aimer By ShanyPour l'être aimer By Shany
Pour l'être aimer By Shanyguestd46df9
 
Expose : la cuisine de taiwanaise
Expose : la cuisine de taiwanaiseExpose : la cuisine de taiwanaise
Expose : la cuisine de taiwanaiseQuincy Hsieh
 
Psico tsc el aparato psíquico 2
Psico tsc el aparato psíquico 2Psico tsc el aparato psíquico 2
Psico tsc el aparato psíquico 2Dra Ja
 
Dix conseils sécurite
Dix conseils sécuriteDix conseils sécurite
Dix conseils sécuriteSNJ
 
Lettre bimensuelle Algex n°102
Lettre bimensuelle Algex n°102Lettre bimensuelle Algex n°102
Lettre bimensuelle Algex n°102OUADA Yazid
 

En vedette (20)

Jeudis du Libre - MySQL InnoDB Cluster
Jeudis du Libre - MySQL InnoDB ClusterJeudis du Libre - MySQL InnoDB Cluster
Jeudis du Libre - MySQL InnoDB Cluster
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensions
 
BackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programmingBackDay Xebia : Découvrez RxJava, le reactive programming
BackDay Xebia : Découvrez RxJava, le reactive programming
 
Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...
Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...
Back Day Xebia / Typesafe : La programmation réactive pour répondre aux défis...
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry pi
 
Introduction to Reactive Java
Introduction to Reactive JavaIntroduction to Reactive Java
Introduction to Reactive Java
 
Mandature legislative 2007 2012
Mandature legislative 2007 2012Mandature legislative 2007 2012
Mandature legislative 2007 2012
 
Communautes 2.0 - Partie6.: Communication 2.0
Communautes 2.0 - Partie6.: Communication 2.0Communautes 2.0 - Partie6.: Communication 2.0
Communautes 2.0 - Partie6.: Communication 2.0
 
Faire forced choices
Faire forced choicesFaire forced choices
Faire forced choices
 
Du côté du cdi 22 27avril
Du côté du cdi 22 27avrilDu côté du cdi 22 27avril
Du côté du cdi 22 27avril
 
Dlire Charly Killian Samuel
Dlire Charly Killian SamuelDlire Charly Killian Samuel
Dlire Charly Killian Samuel
 
Du côté du cdi 27 8juin
Du côté du cdi 27 8juinDu côté du cdi 27 8juin
Du côté du cdi 27 8juin
 
Pour l'être aimer By Shany
Pour l'être aimer By ShanyPour l'être aimer By Shany
Pour l'être aimer By Shany
 
Stephanie
StephanieStephanie
Stephanie
 
Expose : la cuisine de taiwanaise
Expose : la cuisine de taiwanaiseExpose : la cuisine de taiwanaise
Expose : la cuisine de taiwanaise
 
Psico tsc el aparato psíquico 2
Psico tsc el aparato psíquico 2Psico tsc el aparato psíquico 2
Psico tsc el aparato psíquico 2
 
Dix conseils sécurite
Dix conseils sécuriteDix conseils sécurite
Dix conseils sécurite
 
Travail de session 3101
Travail de session 3101Travail de session 3101
Travail de session 3101
 
A4
A4A4
A4
 
Lettre bimensuelle Algex n°102
Lettre bimensuelle Algex n°102Lettre bimensuelle Algex n°102
Lettre bimensuelle Algex n°102
 

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

Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMXAnniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMXJean-Michel Doudoux
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Yves-Emmanuel Jutard
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsJohan Moreau
 
Demarrer ionic en 5 etape
Demarrer ionic en 5 etapeDemarrer ionic en 5 etape
Demarrer ionic en 5 etapeZaïd BOUDAMOUZ
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Association Agile Nantes
 
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014O10ée
 
DevOps, freedom to get stuff done
DevOps, freedom to get stuff doneDevOps, freedom to get stuff done
DevOps, freedom to get stuff doneAhmed Bessifi
 
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016Alexis Ducastel
 
DOCKER AVEC RANCHER
DOCKER AVEC RANCHERDOCKER AVEC RANCHER
DOCKER AVEC RANCHERTREEPTIK
 
Software Craftsmanship : en Pratique - AgileTour
Software Craftsmanship : en Pratique - AgileTourSoftware Craftsmanship : en Pratique - AgileTour
Software Craftsmanship : en Pratique - AgileTourJean-Laurent de Morlhon
 
Réalité virtuelle + Open source = <3
Réalité virtuelle + Open source = <3Réalité virtuelle + Open source = <3
Réalité virtuelle + Open source = <3Yannick Comte
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureGuillaume Laforge
 
Présentation IPV6 ANWARNET 2010
Présentation IPV6 ANWARNET 2010Présentation IPV6 ANWARNET 2010
Présentation IPV6 ANWARNET 2010Fadi Gouasmia
 
Inversion of control with nuun
Inversion of control with nuunInversion of control with nuun
Inversion of control with nuunÉpo Jemba
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Publicis Sapient Engineering
 
Responsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousResponsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousjwajsberg
 
ASP.NET Core: Pourquoi, comment
ASP.NET Core: Pourquoi, commentASP.NET Core: Pourquoi, comment
ASP.NET Core: Pourquoi, commentArnaud Weil
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Ippon
 

Similaire à Réactif, parallèle, asynchrone. Pourquoi! (20)

Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMXAnniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014
 
Javavs net
Javavs netJavavs net
Javavs net
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
Demarrer ionic en 5 etape
Demarrer ionic en 5 etapeDemarrer ionic en 5 etape
Demarrer ionic en 5 etape
 
Javaoop
JavaoopJavaoop
Javaoop
 
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
Agile Tour Nantes 2011 - Jean philippe gouigoux - architecture et agilité, ré...
 
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
Présentation Système d’exploitation Open Source Lepton - MEITO Mai 2014
 
DevOps, freedom to get stuff done
DevOps, freedom to get stuff doneDevOps, freedom to get stuff done
DevOps, freedom to get stuff done
 
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
Docker avec Rancher, du dev à la prod - Makazi au devopsdday 2016
 
DOCKER AVEC RANCHER
DOCKER AVEC RANCHERDOCKER AVEC RANCHER
DOCKER AVEC RANCHER
 
Software Craftsmanship : en Pratique - AgileTour
Software Craftsmanship : en Pratique - AgileTourSoftware Craftsmanship : en Pratique - AgileTour
Software Craftsmanship : en Pratique - AgileTour
 
Réalité virtuelle + Open source = <3
Réalité virtuelle + Open source = <3Réalité virtuelle + Open source = <3
Réalité virtuelle + Open source = <3
 
Innover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans ruptureInnover sans contrainte, intégrer sans rupture
Innover sans contrainte, intégrer sans rupture
 
Présentation IPV6 ANWARNET 2010
Présentation IPV6 ANWARNET 2010Présentation IPV6 ANWARNET 2010
Présentation IPV6 ANWARNET 2010
 
Inversion of control with nuun
Inversion of control with nuunInversion of control with nuun
Inversion of control with nuun
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement
 
Responsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tousResponsible Design ou Le web moderne à destination de tous
Responsible Design ou Le web moderne à destination de tous
 
ASP.NET Core: Pourquoi, comment
ASP.NET Core: Pourquoi, commentASP.NET Core: Pourquoi, comment
ASP.NET Core: Pourquoi, comment
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 

Plus de Henri Tremblay

DevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern JavaDevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern JavaHenri Tremblay
 
OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?
OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?
OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?Henri Tremblay
 
Confoo 2018: Être pragmatique
Confoo 2018: Être pragmatiqueConfoo 2018: Être pragmatique
Confoo 2018: Être pragmatiqueHenri Tremblay
 
DevNexus 2018: Learn Java 8, lambdas and functional programming
DevNexus 2018: Learn Java 8, lambdas and functional programmingDevNexus 2018: Learn Java 8, lambdas and functional programming
DevNexus 2018: Learn Java 8, lambdas and functional programmingHenri Tremblay
 
Do you know your mock? - Madras JUG 20171028
Do you know your mock? - Madras JUG 20171028Do you know your mock? - Madras JUG 20171028
Do you know your mock? - Madras JUG 20171028Henri Tremblay
 
Be Pragmatic - JavaOne 2017
Be Pragmatic - JavaOne 2017Be Pragmatic - JavaOne 2017
Be Pragmatic - JavaOne 2017Henri Tremblay
 
Generics and Lambda survival guide - DevNexus 2017
Generics and Lambda survival guide - DevNexus 2017Generics and Lambda survival guide - DevNexus 2017
Generics and Lambda survival guide - DevNexus 2017Henri Tremblay
 
JavaOne 2016 - Learn Lambda and functional programming
JavaOne 2016 - Learn Lambda and functional programmingJavaOne 2016 - Learn Lambda and functional programming
JavaOne 2016 - Learn Lambda and functional programmingHenri Tremblay
 
Java 8, lambdas, generics: How to survive? - NYC Java Meetup Group
Java 8, lambdas, generics: How to survive? - NYC Java Meetup GroupJava 8, lambdas, generics: How to survive? - NYC Java Meetup Group
Java 8, lambdas, generics: How to survive? - NYC Java Meetup GroupHenri Tremblay
 
Confoo 2016: Initiation aux tests de charge
Confoo 2016: Initiation aux tests de chargeConfoo 2016: Initiation aux tests de charge
Confoo 2016: Initiation aux tests de chargeHenri Tremblay
 
Generics and Lambdas cocktail explained - Montreal JUG
Generics and Lambdas cocktail explained  - Montreal JUGGenerics and Lambdas cocktail explained  - Montreal JUG
Generics and Lambdas cocktail explained - Montreal JUGHenri Tremblay
 
Microbenchmarking with JMH
Microbenchmarking with JMHMicrobenchmarking with JMH
Microbenchmarking with JMHHenri Tremblay
 
Lambdas and Generics (long version) - Bordeaux/Toulouse JUG
Lambdas and Generics (long version) - Bordeaux/Toulouse JUGLambdas and Generics (long version) - Bordeaux/Toulouse JUG
Lambdas and Generics (long version) - Bordeaux/Toulouse JUGHenri Tremblay
 
Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013Henri Tremblay
 
Performance perpétuelle (Devopsdays Paris 2013)
Performance perpétuelle (Devopsdays Paris 2013)Performance perpétuelle (Devopsdays Paris 2013)
Performance perpétuelle (Devopsdays Paris 2013)Henri Tremblay
 
DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...
DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...
DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...Henri Tremblay
 

Plus de Henri Tremblay (17)

DevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern JavaDevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern Java
 
OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?
OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?
OracleCode One 2018: Java 5, 6, 7, 8, 9, 10, 11: What Did You Miss?
 
Confoo 2018: Être pragmatique
Confoo 2018: Être pragmatiqueConfoo 2018: Être pragmatique
Confoo 2018: Être pragmatique
 
DevNexus 2018: Learn Java 8, lambdas and functional programming
DevNexus 2018: Learn Java 8, lambdas and functional programmingDevNexus 2018: Learn Java 8, lambdas and functional programming
DevNexus 2018: Learn Java 8, lambdas and functional programming
 
Do you know your mock? - Madras JUG 20171028
Do you know your mock? - Madras JUG 20171028Do you know your mock? - Madras JUG 20171028
Do you know your mock? - Madras JUG 20171028
 
Be Pragmatic - JavaOne 2017
Be Pragmatic - JavaOne 2017Be Pragmatic - JavaOne 2017
Be Pragmatic - JavaOne 2017
 
Generics and Lambda survival guide - DevNexus 2017
Generics and Lambda survival guide - DevNexus 2017Generics and Lambda survival guide - DevNexus 2017
Generics and Lambda survival guide - DevNexus 2017
 
JavaOne 2016 - Learn Lambda and functional programming
JavaOne 2016 - Learn Lambda and functional programmingJavaOne 2016 - Learn Lambda and functional programming
JavaOne 2016 - Learn Lambda and functional programming
 
Java 8, lambdas, generics: How to survive? - NYC Java Meetup Group
Java 8, lambdas, generics: How to survive? - NYC Java Meetup GroupJava 8, lambdas, generics: How to survive? - NYC Java Meetup Group
Java 8, lambdas, generics: How to survive? - NYC Java Meetup Group
 
Confoo 2016: Initiation aux tests de charge
Confoo 2016: Initiation aux tests de chargeConfoo 2016: Initiation aux tests de charge
Confoo 2016: Initiation aux tests de charge
 
Generics and Lambdas cocktail explained - Montreal JUG
Generics and Lambdas cocktail explained  - Montreal JUGGenerics and Lambdas cocktail explained  - Montreal JUG
Generics and Lambdas cocktail explained - Montreal JUG
 
Perf university
Perf universityPerf university
Perf university
 
Microbenchmarking with JMH
Microbenchmarking with JMHMicrobenchmarking with JMH
Microbenchmarking with JMH
 
Lambdas and Generics (long version) - Bordeaux/Toulouse JUG
Lambdas and Generics (long version) - Bordeaux/Toulouse JUGLambdas and Generics (long version) - Bordeaux/Toulouse JUG
Lambdas and Generics (long version) - Bordeaux/Toulouse JUG
 
Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013
 
Performance perpétuelle (Devopsdays Paris 2013)
Performance perpétuelle (Devopsdays Paris 2013)Performance perpétuelle (Devopsdays Paris 2013)
Performance perpétuelle (Devopsdays Paris 2013)
 
DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...
DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...
DevoxxFR 2013: Lambda are coming. Meanwhile, are you sure we've mastered the ...
 

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

Notes de l'éditeur

  1. http://en.wikipedia.org/wiki/Time-sharing http://en.wikipedia.org/wiki/Unix http://en.wikipedia.org/wiki/CICS http://en.wikipedia.org/wiki/Reactor_pattern http://en.wikipedia.org/wiki/Computer_multitasking http://en.wikipedia.org/wiki/Preemption_(computing)
  2. Aujourd’hui je vais vous faire parcourir l’histoire de l’informatique pour nous permettre de mieux comprendre les nouveaux paradigmes de programmation que nous voyons émerger depuis quelques années.
  3. Ce qui est étonnant c’est que certains concepts proviennent du fin fond de l’aube de l’informatique, sont tombés partiellement dans l’oublie. Loi d’Amdahl Par exemple, …
  4. Mais pourquoi maintenant, pourquoi rien pendant 40 ans et soudain on se découvre plein de nouveaux besoins
  5. Presque tous les développements d’aujourd’hui sont sur x86 Au début du x86, tout était simple
  6. On lance un processus à la fois, il prend des données en entrées et en fait quelquechose
  7. La vie était belle et simple
  8. Évidemment, hors du x86, on utilisait depuis déjà 20 ans des paradigmes plus compliqués Ken Thompson et Dennis Ritchie Multiprogramming: Un programme tourne et on passe au suivant lors d’un IO Cooperative multitasking (CICS par exemple): Un programme tourne et laisse la main des fois pour permettre aux autres de s’exécuter. S’il ne la laisse pas, personne ne peut lui enlever Windows 3.1
  9. Le premier OS maintenant améliorant la situation fut Windows 95 et Windows NT 3.1. Il faisait du preemptive multitasking. Évidemment, les systèmes Unix utilisaient eux aussi ce système sur une architecture SMP
  10. Par exemple, cgi-bin. Un processus reçoit un appel HTTP et fork un processus correspondant à l’URL en passant des variables. Le problème c’est qu’il y a évidemment beaucoup d’overhead à faire des fork. Donc on a eu une autre idée
  11. Pourquoi ne pas faire des threads. Le thread, c’est plein de traitements parallèles mais au sein d’un même processus et partagent la même mémoire. Il n’est plus nécessaire de créer un processus complet, uniquement une nouvelle stack d’appel. Le problème c’est que des OS comme Solaris n’implémentait pas de threads natifs. Donc, par exemple, lors de la sortie de Java, la JVM sur Solaris utilisait un concept de green threads. C’est la JVM qui gérait le time sharing et non l’OS. Évidemment, ça causait des problèmes. Par exemple, il fallait traiter les IO de façon asynchrone pour ne pas gelé un processus.
  12. Donc sommes donc rapidement passé au native threads. C’est l’OS qui s’occupe du time sharing des threads. Cela ralentit la synchronisation et la création mais améliore sensiblement la gestion des IO et le context switching.
  13. On a donc plusieurs processus sur lesquels l’OS distribue les threads des différents processus en tentant de maximiser l’utilisation CPU. Par exemple, si un thread est sur un I/O, pas de soucis, un autre thread prend le relai. Il suffit d’ajouter des threads pour avoir une scalabilité infinie. Pour le reste, la loi de Moore devrait nous assurer que dans le futur, l’augmentation des besoins CPUs sera couverts SMP = Symmetric multiprocessing
  14. Le nombre de transistors double tous les 2 ans et par extension la puissance des ordinateurs
  15. D’ailleurs, l’architecture de Java en général comptait beaucoup sur la loi de Moore. Plusieurs décisions étaient sciemment lentes pour couvrir un maximum de besoins en se disant que rapidement, cette lenteur se fondrait dans la loi de Moore
  16. Et c’est là que le couperet est tombé. On a atteint les limites de fréquences possibles pour un ordinateur. Et dans un ordinateur, ce n’est pas vraiment le nombre de transistors qui est important, c’est la fréquence. La fréquence donne la vitesse de passage des portes. Si on ne peut pas augmenter la vitesse de passage des portes, ça ne sert à rien d’ajouter des portes.
  17. Donc, les fondeurs n’ont pas trop eu le choix de changer de stratégie. Le nombre de transistor continue d’augmenter mais plus la fréquence. À la place, les transistors sont déplacés sur plusieurs cœurs.
  18. D’où l’apparition du Dual Core d’Intel en 2007 Le traitement parallèle n’était plus limité aux serveurs, il était maintenant pour tous
  19. À noter, ce n’est pas une problème de scalabilité. Par exemple, pour un serveur web, chaque requête est traitée par un thread qui lui-même est assigné à un CPU. Donc, il suffit d’ajouter des CPUs, peu importe leurs puissance. Mais ça n’améliore pas mon temps de réponse. Si on zoom, un requête c’est ça
  20. Évidemment, je simplifie un peu. Les fabricants trouvent des « trucs ». Ils augmentent le cache, les algorithmes de prédiction. Mais ce n’est que du patch. Rien de vraiment révolutionnaire
  21. Une deuxième fois pour être bien sûr que c’est intégré. On a surfé plus de 30 ans sur la vague de la loi de Moore et c’est maintenant terminé. Donc, quand les développeurs s’en sont rendus compte, ils se sont mis à la recherche de solution
  22. Et ça tombe bien, la passé est plein de solutions Mais tombé, jetons un coup d’œil sur ce qu’est vraiment une requête
  23. Un requête vu à la loupe ça ressemble à ça. On remarque deux choses: 1- On attend sur des IOs 2- La fréquence étant désormais constante, il n’y a pas de raison pour que les opérations CPU d’une requête soient plus rapides dans le futur
  24. Et si on zoom encore, on voit la chose suivante. En pratique, l’opération 1 effectue un IO, l’OS réquisitionne le CPU pour le donner à quelqu’un d’autre, l’IO termine et éventuellement, l’OS redonne la main au CPU. Deux autres constatations: 1- Le context switching a un coût CPU 2- Le temps de récupération après IO a un coût
  25. Et si on zoom encore, on voit la chose suivante. En pratique, l’opération 1 effectue un IO, l’OS réquisitionne le CPU pour le donner à quelqu’un d’autre, l’IO termine et éventuellement, l’OS redonne la main au CPU. Deux autres constatations: 1- Le context switching a un coût CPU 2- Le temps de récupération après IO a un coût
  26. Il est assez facile de réaliser que plus on a de threads, plus on a d’overhead dû au context switching. Il y a donc une limite
  27. On voit maintenant un peu mieux comment ça marche, Il nous faut maintenant des solutions, des outils pour améliorer nos performances
  28. Les différentes opérations d’une requête serveur sont traités en parallèles pour améliorer les temps de réponse Évidemment, ça ne marche que si le serveur n’est pas trop chargé. Si le CPU d’à côté est en train de traiter la requête de quelqu’un d’autre, il n’aura pas le temps de traiter la notre.
  29. Non-blocking IO ou asynchronous IO Au lieu d’attendre bêtement les fins d’un IO, on fait d’autre chose en attendant d’être notifié de la fin de l’IO Évidemment, pour arriver à faire ça, on doit avoir la collaboration de la libraire effectuant l’IO et de l’OS.
  30. On utilise 1 thread par CPU. Chaque thread effectue du traitement de tâches à partir des tâches disponibles dans une file de tâche
  31. La gestion du multithreading et le partage de données augmente trop la complexité
  32. D’autres, moins extrême n’étaient pas contre le multithreading mais contre la mutabilité des données Car on peut partager des données immutables sans danger Et les ingénieurs, quand ils ont des problèmes, ils ont des solutions
  33. Et évidemment, quand il y a un problème, il y a toujours un outil disponible pour le résoudre PPR: Stratégie différente, intégration dans les OS, langages, frameworks, etc
  34. Aussi dans les navigateurs
  35. Un exemple plus raisonnable
  36. Un exemple plus raisonnable Slide sur le fait que les langages évoluent
  37. En conclusion
  38. One-liner
  39. On parle ici d’immutabilité des données en mémoire. Pas des données persistées
  40. Si vous voulez améliorer vos performances ou diminuer vos coûts d’infrastructure, c’est la seule solution. Par contre, ça reste relativement compliqué, les technologies et outils ne sont pas encore tous prêts. Mais ça vaut quand même la peine de tester sur un petit projet avec des problématiques de performance.
  41. C’est ce qui a amené le concept de programmation réactive. C’est une énorme buzzword qui constitue en fait un pieu vieux. Il consiste à appliquer toutes les nouvelles solutions provenant du passer afin d’atteindre les objectifs suivants
  42. Réactive: 1- Tout en async (orienté évènement) 2- Pas de points de contention (immutable) 3- Un seul thread par hard-thread (moins d’overhead) 4- Scalabilité horizontale infinie C’est donc bien évidemment un gros buzzword mais derrière lequel se cachent de vraies valeurs à respecter pour obtenir de meilleures applications. De plus en plus de devices connectés et donc de sollicitation serveur. La granularité des requêtes diminues. - Petits applications bureautiques: Ne pas faire - Propension à augmenter en puissance: Go, avec aide et outillage