Upload
rodrigo-urubatan
View
898
Download
1
Embed Size (px)
DESCRIPTION
Lighting Talk sobre Evented programming como alternativa a multi threading para programação de alta performance
Citation preview
© Copyright 2010 Hewlett-Packard Development Company, L.P. 1
I SEE MULTI THREADED CODE!
And there are alternatives!!
© Copyright 2010 Hewlett-Packard Development Company, L.P. 2 © Copyright 2010 Hewlett-Packard Development Company, L.P.
Alguem consegue lembrar de algum?
PROBLEMAS COM MULTI THREADING
© Copyright 2010 Hewlett-Packard Development Company, L.P. 3 © Copyright 2010 Hewlett-Packard Development Company, L.P. 3
ESTRATÉGIA PARA ATENDER MUITOS CLIENTES – Uma thread por cliente
– Cada thread precisa de memória própria
– Compartilhar dados entre threads é perigoso e complicado
– É muito dificil depurar e resolver problemas em código multi threading
© Copyright 2010 Hewlett-Packard Development Company, L.P. 4 © Copyright 2010 Hewlett-Packard Development Company, L.P.
MAS MESMO ASSIM ESTA FOI A ÚNICA SOLUÇÃO POR
MUITO TEMPO
© Copyright 2010 Hewlett-Packard Development Company, L.P. 5 © Copyright 2010 Hewlett-Packard Development Company, L.P. 5
C10K PROBLEM
– http://www.kegel.com/c10k.html
– It’s time for web servers to handle 10k clients simultaneously, don’t you think?
– Começaram e pensar nas possíveis soluções para estes problemas em 1999
© Copyright 2010 Hewlett-Packard Development Company, L.P. 6 © Copyright 2010 Hewlett-Packard Development Company, L.P. 6
EPOOL E SELECT
Podem ser a solução!!
© Copyright 2010 Hewlett-Packard Development Company, L.P. 7 © Copyright 2010 Hewlett-Packard Development Company, L.P.
NA VERDADE EVENTED PROGRAMMING!
© Copyright 2010 Hewlett-Packard Development Company, L.P. 8
epoll (linux 2.6+)
select()
poll
kqueue (FreeBSD, NetBSD)
© Copyright 2010 Hewlett-Packard Development Company, L.P. 9 © Copyright 2010 Hewlett-Packard Development Company, L.P. 9
PALAVRAS CHAVE
– Non blocking IO • epoll • poll
• select • kqueue
– Notification • Readiness change • Level triggered change notification
© Copyright 2010 Hewlett-Packard Development Company, L.P. 10 © Copyright 2010 Hewlett-Packard Development Company, L.P. 10
COMO EU USO ISTO?
Ta bonito mas e ai?
© Copyright 2010 Hewlett-Packard Development Company, L.P. 11 © Copyright 2010 Hewlett-Packard Development Company, L.P.
EM RUBY PODE-SE USAR EVENT MACHINE
© Copyright 2010 Hewlett-Packard Development Company, L.P. 12 © Copyright 2010 Hewlett-Packard Development Company, L.P. 12
CÓDIGO EXEMPLO
socket.onclose do
@channel.unsubscribe(sid)
users.delete(user_name)
@channel.push({:message => "just leaved", :user => user_name}.to_json)
@channel.push({:users => users}.to_json)
end
© Copyright 2010 Hewlett-Packard Development Company, L.P. 13 © Copyright 2010 Hewlett-Packard Development Company, L.P.
EM JAVASCRIPT PODE-SE USAR NODE.JS
© Copyright 2010 Hewlett-Packard Development Company, L.P. 14 © Copyright 2010 Hewlett-Packard Development Company, L.P. 14
CÓDIGO EXEMPLO self.httpServer = http.createServer(function (request, response) { request.addListener('end', function () { self.fileServer.serve(request, response, function (err, result) { if (err) { sys.error("Error serving " + request.url + " - " + err.message); response.writeHead(err.status, err.headers); response.end(); } }); }); });
© Copyright 2010 Hewlett-Packard Development Company, L.P. 15 © Copyright 2010 Hewlett-Packard Development Company, L.P.
EM PYTHON PODE-SE USAR TWISTED
© Copyright 2010 Hewlett-Packard Development Company, L.P. 16 © Copyright 2010 Hewlett-Packard Development Company, L.P. 16
CÓDIGO EXEMPLO
getPage(sys.argv[1]).addCallbacks(
callback=lambda value:(println(value),reactor.stop()),
errback=lambda error:(println("an error occurred", error),reactor.stop()))
reactor.run()
© Copyright 2010 Hewlett-Packard Development Company, L.P. 17 © Copyright 2010 Hewlett-Packard Development Company, L.P. 17
VOU USAR NA MINHA APLICAÇÃO HOJE!
Acho que não!
© Copyright 2010 Hewlett-Packard Development Company, L.P. 18
© Copyright 2010 Hewlett-Packard Development Company, L.P. 19 © Copyright 2010 Hewlett-Packard Development Company, L.P.
NÃO ADIANTA QUERER USAR EM UM PEDAÇO DA
APLICAÇÃO
© Copyright 2010 Hewlett-Packard Development Company, L.P. 20 © Copyright 2010 Hewlett-Packard Development Company, L.P.
EXIGE UMA MUDANÇA GRANDE NA FORMA DE
PENSAR
© Copyright 2010 Hewlett-Packard Development Company, L.P. 21 © Copyright 2010 Hewlett-Packard Development Company, L.P.
PODE SER A MELHOR SOLUÇÃO PARA UM SERVIÇO
DA SUA APLICAÇÃO
© Copyright 2010 Hewlett-Packard Development Company, L.P. 22 © Copyright 2010 Hewlett-Packard Development Company, L.P.
A PERFORMANCE NORMALMENTE É MUITO
SUPERIOR
© Copyright 2010 Hewlett-Packard Development Company, L.P. 23 © Copyright 2010 Hewlett-Packard Development Company, L.P.
E O USO DE MEMÓRIA MUITO MAIS BAIXO
© Copyright 2010 Hewlett-Packard Development Company, L.P. 24 © Copyright 2010 Hewlett-Packard Development Company, L.P.
QUE NA ABORDAGEM TRADICIONAL
© Copyright 2010 Hewlett-Packard Development Company, L.P. 25 © Copyright 2010 Hewlett-Packard Development Company, L.P.
POR HOJE É ISTO, MAS TENHO EXEMPLOS EM
RUBY E NODE
© Copyright 2010 Hewlett-Packard Development Company, L.P. 26 © Copyright 2010 Hewlett-Packard Development Company, L.P.
VAMOS CONVERSAR DEPOIS DA #DESCONF?
© Copyright 2010 Hewlett-Packard Development Company, L.P. 27 © Copyright 2010 Hewlett-Packard Development Company, L.P. 27
Q&A?