Programação concorrente

15
Programação Programação Concorrente Concorrente

Transcript of Programação concorrente

Page 1: Programação concorrente

Programação ConcorrenteProgramação Concorrente

Page 2: Programaçã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.

Page 3: Programação concorrente

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.

Page 4: Programação concorrente

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.

Page 5: Programação concorrente

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.

Page 6: Programação concorrente

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.

Page 7: Programação concorrente

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.

Page 8: Programação 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.

Page 9: Programação concorrente

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.

Page 10: Programação concorrente

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.

Page 11: Programação concorrente

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");}}

Page 12: Programação concorrente

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.

Page 13: Programação concorrente

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

Page 14: Programação concorrente

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.

Page 15: Programação concorrente

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.