EventMachine

L
EventMachine

11 avril 2012
pierre couzy
Pourquoi
• Idée initiale : se débarrasser des IO bloquantes
• Les patterns les plus fréquents
  •   Du cache
  •   Des threads
  •   De l’asynchrone
  •   Le pattern Reactor
Le principe
• Supprimer la dépendance 1-1 entre thread et IO. Approche
  Thread-on-event
Qui ?
•   Node
•   Python
•   Java
•   C#
•   …



• Ruby
Comment ça marche ?
• Les tâches bloquantes sont déléguées à l’OS
• Ruby fournit à l’OS les moyens de rappeler votre code

• Deferrable
  • C’est la classe de base
  • Elle définit un pattern de callback
     • callback : quand tout va bien
     • errback : le reste du temps
EventMachine
EventMachine
la Boucle d’EventMachine




      •   EM.run
      •   EM.stop
      •   EM.next_tick
      •   EM.defer



http://timetobleed.com/eventmachine-scalable-non-blocking-io-in-ruby/
Les threads
• next_tick renvoie sur le thread principal
• defer renvoie sur le threadpool (20 par défaut)
EventMachine & callbacks
• Deferrable force l’utilisation d’un callback
  .. Dans lequel on va réutiliser le même pattern
      .. Qui va lui aussi imposer un callabck et un errback
         … et ça va vite devenir
            très difficile
               à relire.
Un peu de sucre ?
• Empiler les callbacks, c’est laid.

• Solution : les fibres
  • Fiber : thread coopératif
      • Le développeur maîtrise l’état
      • Le code rend la main explicitement (yield)
Exemple fibres
Et après ? EM::synchrony




http://www.youtube.com/watch?v=mPDs-xQhPb0
EventMachine
• C’est super !
  • Code lisible avec EM::synchrony
  • Utilisation optimale des threads


• C’est nul !
  • C’est TRES fragile
  • Toutes les libs doivent suivre
1 of 14

Recommended

Les Promises en Javascript by
Les Promises en JavascriptLes Promises en Javascript
Les Promises en JavascriptBenoit Zohar
2.3K views30 slides
Rails 3 au Djangocong by
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au DjangocongJérémy Lecour
763 views18 slides
Introduction Erlang - altnet fr Juin 2013 by
Introduction Erlang - altnet fr Juin 2013Introduction Erlang - altnet fr Juin 2013
Introduction Erlang - altnet fr Juin 2013Yann Schwartz
1.1K views35 slides
Javascript proprement by
Javascript proprementJavascript proprement
Javascript proprementGuillaume Collic
1K views64 slides
Programmation concurrente en Java by
Programmation concurrente en JavaProgrammation concurrente en Java
Programmation concurrente en JavaFlorian Beaufumé
1.5K views46 slides
A la queue leu leu by
A la queue leu leuA la queue leu leu
A la queue leu leunautilebleu
571 views14 slides

More Related Content

Viewers also liked

Présentation du site Parlera (Portail des Actions et Ressources Linguistiques... by
Présentation du site Parlera (Portail des Actions et Ressources Linguistiques...Présentation du site Parlera (Portail des Actions et Ressources Linguistiques...
Présentation du site Parlera (Portail des Actions et Ressources Linguistiques...Coraia
817 views12 slides
Fichieracte117328 by
Fichieracte117328Fichieracte117328
Fichieracte117328genevieve38
322 views5 slides
Despidos colectivos. la comunicación de la decisión empresarial a los repres... by
Despidos colectivos.  la comunicación de la decisión empresarial a los repres...Despidos colectivos.  la comunicación de la decisión empresarial a los repres...
Despidos colectivos. la comunicación de la decisión empresarial a los repres...Universidad Autónoma de Barcelona
505 views13 slides
Zee entrepreneur 15: Live tweet story by
Zee entrepreneur 15: Live tweet storyZee entrepreneur 15: Live tweet story
Zee entrepreneur 15: Live tweet storyVivian Bertin
313 views13 slides
Francesco Zarati by
Francesco ZaratiFrancesco Zarati
Francesco ZaratiGobernabilidad
459 views12 slides
Derecho del Trabajo I. Curso 2010 2011. UAB. ADE. by
Derecho del Trabajo I. Curso 2010 2011. UAB. ADE.Derecho del Trabajo I. Curso 2010 2011. UAB. ADE.
Derecho del Trabajo I. Curso 2010 2011. UAB. ADE.Universidad Autónoma de Barcelona
207 views30 slides

Viewers also liked(20)

Présentation du site Parlera (Portail des Actions et Ressources Linguistiques... by Coraia
Présentation du site Parlera (Portail des Actions et Ressources Linguistiques...Présentation du site Parlera (Portail des Actions et Ressources Linguistiques...
Présentation du site Parlera (Portail des Actions et Ressources Linguistiques...
Coraia817 views
Fichieracte117328 by genevieve38
Fichieracte117328Fichieracte117328
Fichieracte117328
genevieve38322 views
Zee entrepreneur 15: Live tweet story by Vivian Bertin
Zee entrepreneur 15: Live tweet storyZee entrepreneur 15: Live tweet story
Zee entrepreneur 15: Live tweet story
Vivian Bertin313 views
De l’application mobile de santé au dispositif médical by digitalMedLab
De l’application mobile de santé au dispositif médicalDe l’application mobile de santé au dispositif médical
De l’application mobile de santé au dispositif médical
digitalMedLab525 views
(5econf) 16h45 JMap Radar Slide Show by K2 Geospatial
(5econf) 16h45 JMap Radar Slide Show(5econf) 16h45 JMap Radar Slide Show
(5econf) 16h45 JMap Radar Slide Show
K2 Geospatial461 views
Girona Emprèn: La web 2.0 i el seu potencial per a l'empresa by Anna Codina
Girona Emprèn: La web 2.0 i el seu potencial per a l'empresaGirona Emprèn: La web 2.0 i el seu potencial per a l'empresa
Girona Emprèn: La web 2.0 i el seu potencial per a l'empresa
Anna Codina525 views
Practica2 ataque troyano by Carolina Diaz
Practica2 ataque troyanoPractica2 ataque troyano
Practica2 ataque troyano
Carolina Diaz690 views
Assises du Tourisme 2009 - F. Asselin, Coop Vallée Bras du Nord by fgchevrier
Assises du Tourisme 2009 - F. Asselin, Coop Vallée Bras du NordAssises du Tourisme 2009 - F. Asselin, Coop Vallée Bras du Nord
Assises du Tourisme 2009 - F. Asselin, Coop Vallée Bras du Nord
fgchevrier693 views
2ème rencontre d'écrivains publics franciliens by plumesolidaire2010
2ème rencontre d'écrivains publics franciliens2ème rencontre d'écrivains publics franciliens
2ème rencontre d'écrivains publics franciliens
plumesolidaire2010413 views
Horizons Économiques-Journal Étudiant ESG UQAM-septembre 2014 by Katy Borges
Horizons Économiques-Journal Étudiant ESG UQAM-septembre 2014Horizons Économiques-Journal Étudiant ESG UQAM-septembre 2014
Horizons Économiques-Journal Étudiant ESG UQAM-septembre 2014
Katy Borges531 views

Similar to EventMachine

Caching reboot: javax.cache & Ehcache 3 by
Caching reboot: javax.cache & Ehcache 3Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3Louis Jacomet
829 views30 slides
Cours java avance avancé thread arraylist by
Cours java avance avancé thread arraylistCours java avance avancé thread arraylist
Cours java avance avancé thread arraylistHoussem Hamrouni
2.3K views108 slides
Systemes d'explotation: Threads by
Systemes d'explotation: ThreadsSystemes d'explotation: Threads
Systemes d'explotation: ThreadsAlexandru Radovici
408 views46 slides
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja... by
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...ALTER WAY
1.1K views29 slides
YLT paris js - mars 2015 by
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
773 views34 slides
Du JavaScript dans mon projet by
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projetjollivetc
1.4K views84 slides

Similar to EventMachine(20)

Caching reboot: javax.cache & Ehcache 3 by Louis Jacomet
Caching reboot: javax.cache & Ehcache 3Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3
Louis Jacomet829 views
Cours java avance avancé thread arraylist by Houssem Hamrouni
Cours java avance avancé thread arraylistCours java avance avancé thread arraylist
Cours java avance avancé thread arraylist
Houssem Hamrouni2.3K views
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja... by ALTER WAY
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
Solutions Linux 2014 – Alter Way : Industrialisation des développements en Ja...
ALTER WAY1.1K views
YLT paris js - mars 2015 by gaelmetais
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015
gaelmetais773 views
Du JavaScript dans mon projet by jollivetc
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
jollivetc1.4K views
Javascript & tools by Slim Soussi
Javascript & toolsJavascript & tools
Javascript & tools
Slim Soussi827 views
Alphorm.com Formation Le langage Ruby by Alphorm
Alphorm.com Formation Le langage RubyAlphorm.com Formation Le langage Ruby
Alphorm.com Formation Le langage Ruby
Alphorm12.4K views
.NET Microframework: du code, de l’électronique, de la robotique by Microsoft
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique
Microsoft477 views
Alphorm.com Formation Java, les fondamentaux by Alphorm
Alphorm.com Formation Java, les fondamentaux Alphorm.com Formation Java, les fondamentaux
Alphorm.com Formation Java, les fondamentaux
Alphorm60.9K views
Plongée au cœur du Framework .NET 4.5 by Microsoft
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5
Microsoft1.2K views
Coding dojos : diffusez les bonnes pratiques de dev by Pascal LE MERRER
Coding dojos : diffusez les bonnes pratiques de devCoding dojos : diffusez les bonnes pratiques de dev
Coding dojos : diffusez les bonnes pratiques de dev
Pascal LE MERRER95 views
Programmation réactive avec Spring 5 et Reactor by Florian Beaufumé
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et Reactor
Florian Beaufumé4.5K views

More from LeTesteur

RxJs - Reactive Extensions for JavaScript by
RxJs - Reactive Extensions for JavaScriptRxJs - Reactive Extensions for JavaScript
RxJs - Reactive Extensions for JavaScriptLeTesteur
1.1K views8 slides
Drupal en environnement microsoft by
Drupal en environnement microsoftDrupal en environnement microsoft
Drupal en environnement microsoftLeTesteur
2.2K views35 slides
Développer et déployer WordPress en environnement microsoft by
Développer et déployer WordPress en environnement microsoftDévelopper et déployer WordPress en environnement microsoft
Développer et déployer WordPress en environnement microsoftLeTesteur
3.1K views33 slides
Développer et déployer une application php maintenable by
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenableLeTesteur
2.4K views28 slides
Web dev open door by
Web dev   open doorWeb dev   open door
Web dev open doorLeTesteur
390 views29 slides
Joomla Days 2011 Lyon by
Joomla Days 2011 LyonJoomla Days 2011 Lyon
Joomla Days 2011 LyonLeTesteur
718 views29 slides

More from LeTesteur(14)

RxJs - Reactive Extensions for JavaScript by LeTesteur
RxJs - Reactive Extensions for JavaScriptRxJs - Reactive Extensions for JavaScript
RxJs - Reactive Extensions for JavaScript
LeTesteur1.1K views
Drupal en environnement microsoft by LeTesteur
Drupal en environnement microsoftDrupal en environnement microsoft
Drupal en environnement microsoft
LeTesteur2.2K views
Développer et déployer WordPress en environnement microsoft by LeTesteur
Développer et déployer WordPress en environnement microsoftDévelopper et déployer WordPress en environnement microsoft
Développer et déployer WordPress en environnement microsoft
LeTesteur3.1K views
Développer et déployer une application php maintenable by LeTesteur
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
LeTesteur2.4K views
Web dev open door by LeTesteur
Web dev   open doorWeb dev   open door
Web dev open door
LeTesteur390 views
Joomla Days 2011 Lyon by LeTesteur
Joomla Days 2011 LyonJoomla Days 2011 Lyon
Joomla Days 2011 Lyon
LeTesteur718 views
Drupal in the cloud with Windows Azure by LeTesteur
Drupal in the cloud with Windows AzureDrupal in the cloud with Windows Azure
Drupal in the cloud with Windows Azure
LeTesteur2.5K views
Php sous Windows - webcamps Paris by LeTesteur
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps Paris
LeTesteur722 views
Web Matrix (Microsoft WebCamps Paris) by LeTesteur
Web Matrix (Microsoft WebCamps Paris)Web Matrix (Microsoft WebCamps Paris)
Web Matrix (Microsoft WebCamps Paris)
LeTesteur1.1K views
PHP Forum 2010 : Php et microsoft by LeTesteur
PHP Forum 2010 : Php et microsoftPHP Forum 2010 : Php et microsoft
PHP Forum 2010 : Php et microsoft
LeTesteur3.3K views
Eclipse day paris by LeTesteur
Eclipse day parisEclipse day paris
Eclipse day paris
LeTesteur893 views
Reactive programming for javascript by LeTesteur
Reactive programming for javascriptReactive programming for javascript
Reactive programming for javascript
LeTesteur2.3K views
Comment approcherlecloud by LeTesteur
Comment approcherlecloudComment approcherlecloud
Comment approcherlecloud
LeTesteur504 views
What linq is about by LeTesteur
What linq is aboutWhat linq is about
What linq is about
LeTesteur552 views

EventMachine

  • 2. Pourquoi • Idée initiale : se débarrasser des IO bloquantes • Les patterns les plus fréquents • Du cache • Des threads • De l’asynchrone • Le pattern Reactor
  • 3. Le principe • Supprimer la dépendance 1-1 entre thread et IO. Approche Thread-on-event
  • 4. Qui ? • Node • Python • Java • C# • … • Ruby
  • 5. Comment ça marche ? • Les tâches bloquantes sont déléguées à l’OS • Ruby fournit à l’OS les moyens de rappeler votre code • Deferrable • C’est la classe de base • Elle définit un pattern de callback • callback : quand tout va bien • errback : le reste du temps
  • 8. la Boucle d’EventMachine • EM.run • EM.stop • EM.next_tick • EM.defer http://timetobleed.com/eventmachine-scalable-non-blocking-io-in-ruby/
  • 9. Les threads • next_tick renvoie sur le thread principal • defer renvoie sur le threadpool (20 par défaut)
  • 10. EventMachine & callbacks • Deferrable force l’utilisation d’un callback .. Dans lequel on va réutiliser le même pattern .. Qui va lui aussi imposer un callabck et un errback … et ça va vite devenir très difficile à relire.
  • 11. Un peu de sucre ? • Empiler les callbacks, c’est laid. • Solution : les fibres • Fiber : thread coopératif • Le développeur maîtrise l’état • Le code rend la main explicitement (yield)
  • 13. Et après ? EM::synchrony http://www.youtube.com/watch?v=mPDs-xQhPb0
  • 14. EventMachine • C’est super ! • Code lisible avec EM::synchrony • Utilisation optimale des threads • C’est nul ! • C’est TRES fragile • Toutes les libs doivent suivre