Event machine
-
Upload
frevo-on-rails -
Category
Technology
-
view
850 -
download
0
Transcript of Event machine
![Page 1: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/1.jpg)
Event MachineI/O não bloqueante escalável em Ruby
Friday, August 5, 11
![Page 2: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/2.jpg)
Sobre Mim
• Wilker Lúcio
• Consultor para Kajabi (Ruby on Rails)
• http://github.com/wilkerlucio
• @wilkerlucio
Friday, August 5, 11
![Page 3: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/3.jpg)
Problema C10K
Friday, August 5, 11
![Page 4: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/4.jpg)
O que é Event Machine?
• Implementação da “design pattern” Reactor
• Similar a Node (Javascript) ou Twisted (Python)
Friday, August 5, 11
![Page 5: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/5.jpg)
Quem usa Event Machine?
• Engine Yard
• Heroku
• Github
• Campfire
• ...
Friday, August 5, 11
![Page 6: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/6.jpg)
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 CPU
Friday, August 5, 11
![Page 7: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/7.jpg)
Um simples servidor TCP
TCPSocket#read*bloqueia
Solução comum: usaruma thread por cliente
Friday, August 5, 11
![Page 8: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/8.jpg)
I/O não bloqueante
Alternativa para Threads:simplesmente não bloqueie!
Friday, August 5, 11
![Page 9: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/9.jpg)
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íodo
Friday, August 5, 11
![Page 10: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/10.jpg)
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
![Page 11: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/11.jpg)
Escrevendo código assíncronoCódigo síncrono usa retorno de valores:
Eventos async usam blocos de código:
Diferente de blocos comuns, os blocos de eventos sãogravados para serem invocados futuramente:
Friday, August 5, 11
![Page 12: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/12.jpg)
Demo - Chat com EventMachine + WebSockets
Friday, August 5, 11
![Page 13: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/13.jpg)
Experimento - MiniWar
Friday, August 5, 11
![Page 14: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/14.jpg)
Fibers
• Goliath
• EM-Synchrony
Friday, August 5, 11
![Page 15: Event machine](https://reader033.fdocuments.net/reader033/viewer/2022052619/556669f5d8b42a3d3f8b4e5c/html5/thumbnails/15.jpg)
Obrigado!
Friday, August 5, 11