Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Event machine

1,066 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Event machine

  1. 1. Event Machine I/O não bloqueante escalável em RubyFriday, August 5, 11
  2. 2. Sobre Mim • Wilker Lúcio • Consultor para Kajabi (Ruby on Rails) • http://github.com/wilkerlucio • @wilkerlucio • wilkerlucio@gmail.comFriday, August 5, 11
  3. 3. Problema C10KFriday, August 5, 11
  4. 4. O que é Event Machine? • Implementação da “design pattern” Reactor • Similar a Node (Javascript) ou Twisted (Python)Friday, August 5, 11
  5. 5. Quem usa Event Machine? • Engine Yard • Heroku • Github • Campfire • ...Friday, August 5, 11
  6. 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. 7. Um simples servidor TCP TCPSocket#read* bloqueia Solução comum: usar uma thread por clienteFriday, August 5, 11
  8. 8. I/O não bloqueante Alternativa para Threads: simplesmente não bloqueie!Friday, August 5, 11
  9. 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. 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. 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. 12. Demo - Chat com EventMachine + WebSocketsFriday, August 5, 11
  13. 13. Experimento - MiniWarFriday, August 5, 11
  14. 14. Fibers • Goliath • EM-SynchronyFriday, August 5, 11
  15. 15. Obrigado!Friday, August 5, 11

×