Your SlideShare is downloading. ×
Event machine
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Event machine

837
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
837
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Event Machine I/O não bloqueante escalável em RubyFriday, August 5, 11
  • 2. Sobre Mim • Wilker Lúcio • Consultor para Kajabi (Ruby on Rails) • http://github.com/wilkerlucio • @wilkerlucio • wilkerlucio@gmail.comFriday, August 5, 11
  • 3. Problema C10KFriday, August 5, 11
  • 4. O que é Event Machine? • Implementação da “design pattern” Reactor • Similar a Node (Javascript) ou Twisted (Python)Friday, August 5, 11
  • 5. Quem usa Event Machine? • Engine Yard • Heroku • Github • Campfire • ...Friday, August 5, 11
  • 6. O que é I/O? • Arquivos • Network • respostas de query mysql • respostas http • respostas memcache • A maioria das aplicações web são ligadas a I/O e não a CPUFriday, August 5, 11
  • 7. Um simples servidor TCP TCPSocket#read* bloqueia Solução comum: usar uma thread por clienteFriday, August 5, 11
  • 8. I/O não bloqueante Alternativa para Threads: simplesmente não bloqueie!Friday, August 5, 11
  • 9. O que é o Reactor? • Reactor é simplesmente um loop while single thread, chamado de “loop reactor” • Seu código “reage” a eventos • Se seu evento demora muito para ser tratado, outros eventos não podem ocorrer durante esse períodoFriday, August 5, 11
  • 10. Lição: NUNCA bloqueie o reactor! • Não use sleep(x) • Não faça loops demorados (100_000.times) • Não use I/O bloqueante (queries em database) • Não faça pooling (while !condição)Friday, August 5, 11
  • 11. Escrevendo código assíncrono Código síncrono usa retorno de valores: Eventos async usam blocos de código: Diferente de blocos comuns, os blocos de eventos são gravados para serem invocados futuramente:Friday, August 5, 11
  • 12. Demo - Chat com EventMachine + WebSocketsFriday, August 5, 11
  • 13. Experimento - MiniWarFriday, August 5, 11
  • 14. Fibers • Goliath • EM-SynchronyFriday, August 5, 11
  • 15. Obrigado!Friday, August 5, 11