Programação ConcorrenteProgramação Concorrente
Programação ConcorrenteProgramação Concorrente
 A construção e execuçãoA construção e execução
concorrente, podem serconcorrente, podem ser
implementadas como programasimplementadas como programas
separados ou um conjunto de thread.separados ou um conjunto de thread.
 Podem ser executadas por um únicoPodem ser executadas por um único
processador, vários processadoresprocessador, vários processadores
em um único equipamento, ouem 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óriaComunicação por memória
compartilhada;compartilhada;
 Comunicação por troca deComunicação por troca de
mensagens.mensagens.
Programação ConcorrenteProgramação Concorrente
 Comunicação por memóriaComunicação por memória
compartilhadacompartilhada
Componentes concorrentesComponentes concorrentes
comunicam-se ao alterar o conteúdocomunicam-se ao alterar o conteúdo
de áreas de memóriade á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 deComunicação por troca de
mensagensmensagens
 Erlang e Occam utilizam tal modelo.Erlang e Occam utilizam tal modelo.
 Mais simples que a comunicação porMais simples que a comunicação por
memória compartilhada.memória compartilhada.
 Forma mais robusta de programaçãoForma mais robusta de programação
concorrente.concorrente.
Programação ConcorrenteProgramação Concorrente
 Linguagens para programaçãoLinguagens para programação
concorrenteconcorrente
 Atualmente, as linguagens maisAtualmente, as linguagens mais
utilizadas são Java e C#. Utilizam outilizadas são Java e C#. Utilizam o
modelo de memória compartilhada,modelo de memória compartilhada,
com bloqueio fornecido porcom bloqueio fornecido por
monitores.monitores.
Programação ConcorrenteProgramação Concorrente
 Desde a década de 1980, asDesde 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 LucentDesenvolvida pela Lucent
Technologies Inc.Technologies Inc.
 Roda em cima de uma máquinaRoda em cima de uma máquina
virtual, mas não é orientada avirtual, mas não é orientada a
objetos.objetos.
Programação ConcorrenteProgramação Concorrente
Código LimboCódigo Limbo
hello.b)hello.b)
implement Hello;implement Hello;
include "sys.m"; //biblioteca da linguagem Limboinclude "sys.m"; //biblioteca da linguagem Limbo
sys: 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, worldn");sys->print("hello, worldn");
}}
Programação ConcorrenteProgramação Concorrente
 Linguagem de Programação OccamLinguagem de Programação Occam
 Linguagem para aplicações científicasLinguagem para aplicações científicas
e de engenhariae de engenharia
 A comunicação é feita através de umA comunicação é feita através de um
construtor especial da linguagemconstrutor especial da linguagem
chamado canal.chamado canal.
Programação ConcorrenteProgramação Concorrente
 Código OccamCódigo Occam
PARPAR
SEQSEQ
canal3 ? valor1canal3 ? valor1
valor := valor1 + 1valor := valor1 + 1
SEQSEQ
canal4 ! valor2canal4 ! valor2
valor2 := valor2 + 1valor2 := valor2 + 1
Programação ConcorrenteProgramação Concorrente
 Linguagem de Programação ErlangLinguagem de Programação Erlang
 Linguagem de programaçãoLinguagem de programação
declarativa, para programaçãodeclarativa, para programação
paralela e distribuída.paralela e distribuída.
 Tira o máximo proveito deTira 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.

Programação concorrente

  • 1.
  • 2.
    Programação ConcorrenteProgramação Concorrente A construção e execuçãoA construção e execução concorrente, podem serconcorrente, podem ser implementadas como programasimplementadas como programas separados ou um conjunto de thread.separados ou um conjunto de thread.  Podem ser executadas por um únicoPodem ser executadas por um único processador, vários processadoresprocessador, vários processadores em um único equipamento, ouem um único equipamento, ou processadores distribuídos.processadores distribuídos.
  • 3.
    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.
  • 4.
    Programação ConcorrenteProgramação Concorrente Interaçãoe comunicação concorrenteInteração e comunicação concorrente  Comunicação por memóriaComunicação por memória compartilhada;compartilhada;  Comunicação por troca deComunicação por troca de mensagens.mensagens.
  • 5.
    Programação ConcorrenteProgramação Concorrente Comunicação por memóriaComunicação por memória compartilhadacompartilhada Componentes concorrentesComponentes concorrentes comunicam-se ao alterar o conteúdocomunicam-se ao alterar o conteúdo de áreas de memóriade áreas de memória compartilhadas.compartilhadas.
  • 6.
    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.
  • 7.
    Programação ConcorrenteProgramação Concorrente Comunicação por troca deComunicação por troca de mensagensmensagens  Erlang e Occam utilizam tal modelo.Erlang e Occam utilizam tal modelo.  Mais simples que a comunicação porMais simples que a comunicação por memória compartilhada.memória compartilhada.  Forma mais robusta de programaçãoForma mais robusta de programação concorrente.concorrente.
  • 8.
    Programação ConcorrenteProgramação Concorrente Linguagens para programaçãoLinguagens para programação concorrenteconcorrente  Atualmente, as linguagens maisAtualmente, as linguagens mais utilizadas são Java e C#. Utilizam outilizadas são Java e C#. Utilizam o modelo de memória compartilhada,modelo de memória compartilhada, com bloqueio fornecido porcom bloqueio fornecido por monitores.monitores.
  • 9.
    Programação ConcorrenteProgramação Concorrente Desde a década de 1980, asDesde a década de 1980, as linguagens Erlang, Limbo e Occam,linguagens Erlang, Limbo e Occam, tiveram uso industrial.tiveram uso industrial.
  • 10.
    Programação ConcorrenteProgramação Concorrente Linguagem de Programação LimboLinguagem de Programação Limbo  Desenvolvida pela LucentDesenvolvida pela Lucent Technologies Inc.Technologies Inc.  Roda em cima de uma máquinaRoda em cima de uma máquina virtual, mas não é orientada avirtual, mas não é orientada a objetos.objetos.
  • 11.
    Programação ConcorrenteProgramação Concorrente CódigoLimboCódigo Limbo hello.b)hello.b) implement Hello;implement Hello; include "sys.m"; //biblioteca da linguagem Limboinclude "sys.m"; //biblioteca da linguagem Limbo sys: 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, worldn");sys->print("hello, worldn"); }}
  • 12.
    Programação ConcorrenteProgramação Concorrente Linguagem de Programação OccamLinguagem de Programação Occam  Linguagem para aplicações científicasLinguagem para aplicações científicas e de engenhariae de engenharia  A comunicação é feita através de umA comunicação é feita através de um construtor especial da linguagemconstrutor especial da linguagem chamado canal.chamado canal.
  • 13.
    Programação ConcorrenteProgramação Concorrente Código OccamCódigo Occam PARPAR SEQSEQ canal3 ? valor1canal3 ? valor1 valor := valor1 + 1valor := valor1 + 1 SEQSEQ canal4 ! valor2canal4 ! valor2 valor2 := valor2 + 1valor2 := valor2 + 1
  • 14.
    Programação ConcorrenteProgramação Concorrente Linguagem de Programação ErlangLinguagem de Programação Erlang  Linguagem de programaçãoLinguagem de programação declarativa, para programaçãodeclarativa, para programação paralela e distribuída.paralela e distribuída.  Tira o máximo proveito deTira o máximo proveito de paralelismo com processadores.paralelismo com processadores.
  • 15.
    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.