Successfully reported this slideshow.

Event machine

1,044 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

×