Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAna Carolina Covalski Osório Alterado mais de 9 anos atrás
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
2
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
3
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
4
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
5
Características de linguagens concorrentes 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?
6
Formas de Implementar C oncorrê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 z y P1 P2 P3
7
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 x y z Formas de Implementar C oncorrência
8
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 C oncorrência
9
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
10
Erlang 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
11
Erlang 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)
12
Erlang Concorrência –Processos Pid=spawn(m,f,[Arg1,Arg2]) –Mensagens Send Pid ! Mensagem Receive receive Pattern1 -> ação1; Pattern2 -> ação2; end
13
Erlang – Exemplo: Echo Program -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. Pid1Pid2 Pid2! hello Receive {From,MSG} -> stop -> Pid1! hello
14
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
15
Proposta de projeto BNF original –Programa ::= Expressao –Expressao ::= Valor | ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse –DeclaracaoFuncional ::= DecVariavel | DecFuncao | DeclaracaoFuncional "," DeclaracaoFuncional
16
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
17
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
18
Proposta de projeto O mecanismo de concorrência proposto dá ao programador a possibilidade de tratar erros Exemplo: if pid ! “teste” then else
19
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.