27
© Copyright 2010 Hewlett-Packard Development Company, L.P. 1 I SEE MULTI THREADED CODE! And there are alternatives!!

Evented programming

Embed Size (px)

DESCRIPTION

Lighting Talk sobre Evented programming como alternativa a multi threading para programação de alta performance

Citation preview

Page 1: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 1

I SEE MULTI THREADED CODE!

And there are alternatives!!

Page 2: Evented programming

© 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

Page 3: Evented programming

© 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

Page 4: Evented programming

© 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

Page 5: Evented programming

© 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

Page 6: Evented programming

© 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!!

Page 7: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 7 © Copyright 2010 Hewlett-Packard Development Company, L.P.

NA VERDADE EVENTED PROGRAMMING!

Page 8: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 8

epoll (linux 2.6+)

select()

poll

kqueue (FreeBSD, NetBSD)

Page 9: Evented programming

© 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

Page 10: Evented programming

© 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?

Page 11: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 11 © Copyright 2010 Hewlett-Packard Development Company, L.P.

EM RUBY PODE-SE USAR EVENT MACHINE

Page 12: Evented programming

© 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

Page 13: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 13 © Copyright 2010 Hewlett-Packard Development Company, L.P.

EM JAVASCRIPT PODE-SE USAR NODE.JS

Page 14: Evented programming

© 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(); } }); }); });

Page 15: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 15 © Copyright 2010 Hewlett-Packard Development Company, L.P.

EM PYTHON PODE-SE USAR TWISTED

Page 16: Evented programming

© 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()

Page 17: Evented programming

© 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!

Page 18: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 18

Page 19: Evented programming

© 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

Page 20: Evented programming

© 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

Page 21: Evented programming

© 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

Page 22: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 22 © Copyright 2010 Hewlett-Packard Development Company, L.P.

A PERFORMANCE NORMALMENTE É MUITO

SUPERIOR

Page 23: Evented programming

© 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

Page 24: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 24 © Copyright 2010 Hewlett-Packard Development Company, L.P.

QUE NA ABORDAGEM TRADICIONAL

Page 25: Evented programming

© 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

Page 26: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 26 © Copyright 2010 Hewlett-Packard Development Company, L.P.

VAMOS CONVERSAR DEPOIS DA #DESCONF?

Page 27: Evented programming

© Copyright 2010 Hewlett-Packard Development Company, L.P. 27 © Copyright 2010 Hewlett-Packard Development Company, L.P. 27

Q&A?