Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo...
-
Upload
ana-carolina-covalski-osorio -
Category
Documents
-
view
215 -
download
0
Transcript of Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo...
![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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/1.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/2.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/3.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/4.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/5.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/6.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/7.jpg)
• 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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/8.jpg)
• 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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/9.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/10.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/11.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/12.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/13.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/14.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/15.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/16.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/17.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/18.jpg)
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.](https://reader036.fdocumentos.tips/reader036/viewer/2022070507/5706384b1a28abb8238f5fc1/html5/thumbnails/19.jpg)
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