19
Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Embed Size (px)

Citation preview

Page 1: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Concorrência em LF1

Paradigmas de Linguagens de Programação20 de junho de 2006

Aline TimóteoCarlos Rodrigues

Flávia FalcãoTiago Rolim

Page 2: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Roteiro• Conceitos de concorrência

– Definição– Programação concorrente X seqüencial– Formas de implementar concorrência

• Visão geral de Erlang• Proposta de projeto

Page 3: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Concorrência

• Um programa seqüencial tem uma simples thread de controle.– Sua execução é chamada de

processo• Um programa concorrente tem

múltiplas threads de controle– Eles podem ser executados como

processos em paralelo

Page 4: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Por que programas concorrentes?• Otimização da computação

– Diminuir delay e aumentar throughput• Simulação

– Necessidade de modelar aspectos concorrentes do mundo real

• Paralelismo– Execução usando várias CPUs

• Distribuição– Coordenar serviços distribuídos

Page 5: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Características de linguagensconcorrentes

• Uma linguagem de programação concorrente deve prover mecanismos para:– Criar processo

• Como especificar processos concorrentes?– Comunicação

• Como fazer processos trocarem informações?– Sincronização

• Como fazer processos manterem consistência?

Page 6: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Formas de Implementar Concorrência• Compartilhamento

de memória– A comunicação é

feita ao alterar o conteúdo de áreas de memória compartilhadas.

– Java e C# são linguagens que utilizam tal modelo

x zy

P1P2

P3

Page 7: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

• Troca de mensagem– A comunicação é feita através das troca de

mensagens– A troca de mensagens pode ser realizada

assincronamente– Erlang e Occam são linguagens que utilizam

tal modelo

P1

P2

P3

xy

z

Formas de Implementar Concorrência

Page 8: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

• Troca de Mensagem– Canal para armazenar a mensagem

• Buffer• Fila de mensagens

– A comunicação em um canal pode ser um a um ou broadcast

– A mensagem trocada pode conter cópia do dado ou ponteiro para ele

Formas de Implementar Concorrência

Page 9: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Erlang• O que é?

Uma linguagem funcional, de uso geral, com suporte incorporado para concorrência, distribuição e tolerância a falhas.

• Para que serve?– Sistemas de Telecomunicações– Servidores de Internet– Gerenciamento de redes móveis– Aplicações de banco de dados

Page 10: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

ErlangErlang• Características

– Linguagem declarativa– Não existe declaração de tipos de dados– Concorrência– Comunicação entre processos por

mensagens– Manipulação de exceções– Programação distribuída

Page 11: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

ErlangErlang• Tipos de dados

– Números: Inteiros e Floats– Àtomos– Tuplos– Listas– Pids (Process Ids)– Ports (canais de comunicação)– Referências (objetos únicos ao nível de vários

nós)– Binários (pacotes ou outros conjuntos de bits)

Page 12: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

ErlangErlang• Concorrência

– ProcessosPid=spawn(m,f,[Arg1,Arg2])

– Mensagens• Send

Pid ! Mensagem• Receive

receivePattern1 -> ação1;Pattern2 -> ação2;

end

Page 13: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Erlang – Exemplo: Echo Erlang – Exemplo: Echo ProgramProgram-module(echo).-export([go/0, loop/0]). go() ->

Pid2 = spawn(echo, loop, []),Pid2 ! {self(), hello},receive

{Pid2, Msg} ->io:format("P1 ~w~n",[Msg])

end,Pid2 ! stop.

loop() ->receive

{From, Msg} -> From ! {self(), Msg},loop();

stop ->true

end.

Pid1 Pid2Pid2! hello

Receive {From,MSG} -> stop ->

Pid1! hello

Page 14: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Proposta de projeto• Extender LF1 para incluir

concorrência• O modelo proposto é baseado em

processos, não em threads– Não há compartilhamento de recursos

• Os processos se comunicam através de mensagens assíncronas

Page 15: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Proposta de projeto• BNF original

– Programa ::= Expressao– Expressao ::= Valor

| ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse

– DeclaracaoFuncional ::= DecVariavel | DecFuncao | DeclaracaoFuncional "," DeclaracaoFuncional

Page 16: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Proposta de projeto• BNF extendida

– Programa ::= Expressao– Expressao ::= Valor

| ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse | EnviaMensagem | RecebeMensagem

– DeclaracaoFuncional ::= DecVariavel | DecFuncao | DecProcesso | DeclaracaoFuncional "," DeclaracaoFuncional

– ListaClausulas ::= “{” ListId “}” “->” ListExp | ListaClausulas “;” ListaClausulas

Page 17: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Proposta de projeto• BNF extendida

– DecProcesso ::= “proc” Id “(” Id ListExp “)”• Associa o identificador do processo criado a

Id – EnviaMensagem ::= Id “!” “{” ListExp “}”

• Retorna true se o processo identificado por Id existir, e false caso contrário

– RecebeMensagem ::= “receive” ListaClausulas “end”• Retorna true quando dados são recebidos

– ListaClausulas ::= “{“ ListId “}” “->” ListExp | ListaClausulas “;” ListaClausulas

Page 18: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Proposta de projeto• O mecanismo de concorrência

proposto dá ao programador a possibilidade de tratar erros

• Exemplo:if pid ! “teste” then

<faz_alguma_coisa>else

<faz_outra>

Page 19: Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim

Proposta de projeto• Assim como em Erlang, a função

self() retorna o identificador do processo que a chama– Isto permite que o processo inicial

possa enviar uma referência para si próprio a outros processos

– Com isso, estes processos podem enviar o resultado de alguma computação de volta a ele