Programação concorrente
-
Upload
fabio-duarte -
Category
Technology
-
view
35 -
download
0
Transcript of Programação concorrente
Programação ConcorrenteProgramação Concorrente
Programação ConcorrenteProgramação Concorrente A construção e execução A construção e execução
concorrente, podem ser concorrente, podem ser implementadas como programas implementadas como programas separados ou um conjunto de thread.separados ou um conjunto de thread.
Podem ser executadas por um único Podem ser executadas por um único processador, vários processadores processador, vários processadores em um único equipamento, ou em um único equipamento, ou processadores distribuídos.processadores distribuídos.
Programação ConcorrenteProgramação Concorrente Pioneiros na área: Edsger Dijkstra, Pioneiros na área: Edsger Dijkstra,
Per Brinch Hansen e C. A. R. Hoare.Per Brinch Hansen e C. A. R. Hoare.
Programação ConcorrenteProgramação Concorrente
Interação e comunicação concorrenteInteração e comunicação concorrente
Comunicação por memória Comunicação por memória compartilhada;compartilhada;
Comunicação por troca de Comunicação por troca de mensagens.mensagens.
Programação ConcorrenteProgramação Concorrente Comunicação por memória Comunicação por memória
compartilhadacompartilhada
Componentes concorrentes Componentes concorrentes comunicam-se ao alterar o conteúdo comunicam-se ao alterar o conteúdo de áreas de memória de áreas de memória compartilhadas.compartilhadas.
Programação ConcorrenteProgramação Concorrente Java e C# utilizam tal modelo.Java e C# utilizam tal modelo.
Requer alguns métodos de trava:Requer alguns métodos de trava:• Mutex,Mutex,• Semáforo ouSemáforo ou• Monitor.Monitor.
Programação ConcorrenteProgramação Concorrente Comunicação por troca de Comunicação por troca de
mensagensmensagens
Erlang e Occam utilizam tal modelo.Erlang e Occam utilizam tal modelo.
Mais simples que a comunicação por Mais simples que a comunicação por memória compartilhada.memória compartilhada.
Forma mais robusta de programação Forma mais robusta de programação concorrente.concorrente.
Programação ConcorrenteProgramação Concorrente Linguagens para programação Linguagens para programação
concorrenteconcorrente
Atualmente, as linguagens mais Atualmente, as linguagens mais utilizadas são Java e C#. Utilizam o utilizadas são Java e C#. Utilizam o modelo de memória compartilhada, modelo de memória compartilhada, com bloqueio fornecido por com bloqueio fornecido por monitores.monitores.
Programação ConcorrenteProgramação Concorrente Desde a década de 1980, as Desde a década de 1980, as
linguagens Erlang, Limbo e Occam, linguagens Erlang, Limbo e Occam, tiveram uso industrial.tiveram uso industrial.
Programação ConcorrenteProgramação Concorrente Linguagem de Programação LimboLinguagem de Programação Limbo
Desenvolvida pela Lucent Desenvolvida pela Lucent Technologies Inc.Technologies Inc.
Roda em cima de uma máquina Roda em cima de uma máquina virtual, mas não é orientada a virtual, mas não é orientada a objetos.objetos.
Programação ConcorrenteProgramação ConcorrenteCódigo LimboCódigo Limbo
hello.b)hello.b)implement Hello;implement Hello;include "sys.m"; //biblioteca da linguagem Limboinclude "sys.m"; //biblioteca da linguagem Limbosys: Sys;sys: Sys;include "draw.m";include "draw.m";Hello: moduleHello: module{{init:init: fn(ctxt: ref Draw->Context, argv: list of string);fn(ctxt: ref Draw->Context, argv: list of string);};};init(ctxt: ref Draw->Context, argv: list of string)init(ctxt: ref Draw->Context, argv: list of string){{sys = load Sys Sys->PATH;sys = load Sys Sys->PATH;sys->print("hello, world\n");sys->print("hello, world\n");}}
Programação ConcorrenteProgramação Concorrente Linguagem de Programação OccamLinguagem de Programação Occam
Linguagem para aplicações Linguagem para aplicações científicas e de engenhariacientíficas e de engenharia
A comunicação é feita através de um A comunicação é feita através de um construtor especial da linguagem construtor especial da linguagem chamado canal.chamado canal.
Programação ConcorrenteProgramação Concorrente Código OccamCódigo Occam
PARPARSEQSEQ
canal3 ? valor1canal3 ? valor1valor := valor1 + 1valor := valor1 + 1
SEQSEQcanal4 ! valor2canal4 ! valor2valor2 := valor2 + 1valor2 := valor2 + 1
Programação ConcorrenteProgramação Concorrente Linguagem de Programação ErlangLinguagem de Programação Erlang
Linguagem de programação Linguagem de programação declarativa, para programação declarativa, para programação paralela e distribuída.paralela e distribuída.
Tira o máximo proveito de Tira o máximo proveito de paralelismo com processadores.paralelismo com processadores.
Programação ConcorrenteProgramação Concorrente Código ErlangCódigo Erlang
module(hello_concurrent).module(hello_concurrent).export([receiver/0. giver/1. start/0]).export([receiver/0. giver/1. start/0]).receiver() ->receiver() ->
receivereceive diediedie -> ok;diediedie -> ok; { name, Name} -> io:format(“hello, ~s~n”, [Name]), { name, Name} -> io:format(“hello, ~s~n”, [Name]), receiver() receiver() end.end.
giver(ReceiverPid) ->giver(ReceiverPid) -> ReceiverPid = spawn(hello_concurrent, receiver, [] ),ReceiverPid = spawn(hello_concurrent, receiver, [] ), spawn(hello_concurrent, giver, [ReceiverPid]),spawn(hello_concurrent, giver, [ReceiverPid]), start_finished.start_finished.