A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

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


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google