eventmachine
TRANSCRIPT
![Page 1: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/1.jpg)
EventMachine
11 avril 2012pierre couzy
![Page 2: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/3.jpg)
Le principe • Supprimer la dépendance 1-1 entre thread et IO. Approche
Thread-on-event
![Page 4: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/4.jpg)
Qui ?• Node• Python• Java• C#• …
• Ruby
![Page 5: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/6.jpg)
![Page 7: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/7.jpg)
![Page 8: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/9.jpg)
Les threads• next_tick renvoie sur le thread principal• defer renvoie sur le threadpool (20 par défaut)
![Page 10: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/12.jpg)
Exemple fibres
![Page 13: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/13.jpg)
Et après ? EM::synchrony
http://www.youtube.com/watch?v=mPDs-xQhPb0
![Page 14: EventMachine](https://reader035.vdocuments.net/reader035/viewer/2022070321/558fd93d1a28ab7c528b458a/html5/thumbnails/14.jpg)
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