14
EventMachine 11 avril 2012 pierre couzy

EventMachine

Embed Size (px)

Citation preview

Page 1: EventMachine

EventMachine

11 avril 2012pierre couzy

Page 2: EventMachine

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

Page 3: EventMachine

Le principe • Supprimer la dépendance 1-1 entre thread et IO. Approche

Thread-on-event

Page 4: EventMachine

Qui ?• Node• Python• Java• C#• …

• Ruby

Page 5: EventMachine

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

Page 6: EventMachine
Page 7: EventMachine
Page 8: EventMachine

la Boucle d’EventMachine

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

http://timetobleed.com/eventmachine-scalable-non-blocking-io-in-ruby/

Page 9: EventMachine

Les threads• next_tick renvoie sur le thread principal• defer renvoie sur le threadpool (20 par défaut)

Page 10: EventMachine

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 devenirtrès difficile

à relire.

Page 11: EventMachine

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)

Page 12: EventMachine

Exemple fibres

Page 13: EventMachine

Et après ? EM::synchrony

http://www.youtube.com/watch?v=mPDs-xQhPb0

Page 14: EventMachine

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