SlideShare uma empresa Scribd logo
1 de 15
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.

Mais conteúdo relacionado

Semelhante a Programação Concorrente

Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing Jorge Cardoso
 
Programação concorrente
Programação concorrenteProgramação concorrente
Programação concorrenteFabio Duarte
 
Programando os Microcontroladores PIC
Programando os Microcontroladores PICProgramando os Microcontroladores PIC
Programando os Microcontroladores PICFabio Souza
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Jorge Cardoso
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Luís Gustavo Martins
 
Gerenciador do atmega16
Gerenciador do atmega16Gerenciador do atmega16
Gerenciador do atmega16Gabriel Lima
 
Aula 03 isc -softwares-hardwares-arquiteturas
Aula 03   isc -softwares-hardwares-arquiteturasAula 03   isc -softwares-hardwares-arquiteturas
Aula 03 isc -softwares-hardwares-arquiteturasFábio Andrade
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgetsRenzo Petri
 
Software Livre e Open Source
Software Livre e Open SourceSoftware Livre e Open Source
Software Livre e Open SourceMarcelo Lira
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebIsrael Messias
 
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxDesenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxFlávio Ribeiro
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkFlávio Lisboa
 
Programacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdfProgramacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdfMuseiwaLopes
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux EmbarcadoDiego Sueiro
 
Conceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoConceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoJorge Cardoso
 
Engenharia Reversa no Linux
Engenharia Reversa no LinuxEngenharia Reversa no Linux
Engenharia Reversa no LinuxFernando Mercês
 

Semelhante a Programação Concorrente (20)

Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
 
Programação concorrente
Programação concorrenteProgramação concorrente
Programação concorrente
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 
Programando os Microcontroladores PIC
Programando os Microcontroladores PICProgramando os Microcontroladores PIC
Programando os Microcontroladores PIC
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
 
Gerenciador do atmega16
Gerenciador do atmega16Gerenciador do atmega16
Gerenciador do atmega16
 
Aula 03 isc -softwares-hardwares-arquiteturas
Aula 03   isc -softwares-hardwares-arquiteturasAula 03   isc -softwares-hardwares-arquiteturas
Aula 03 isc -softwares-hardwares-arquiteturas
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgets
 
Software Livre e Open Source
Software Livre e Open SourceSoftware Livre e Open Source
Software Livre e Open Source
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente Web
 
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxDesenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
 
Programacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdfProgramacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdf
 
Gisvm FLUC 2010
Gisvm FLUC 2010Gisvm FLUC 2010
Gisvm FLUC 2010
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado
 
Conceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoConceitos Fundamentais de Programacao
Conceitos Fundamentais de Programacao
 
Engenharia Reversa no Linux
Engenharia Reversa no LinuxEngenharia Reversa no Linux
Engenharia Reversa no Linux
 

Programação Concorrente

  • 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çã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.
  • 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ó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"); }}
  • 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.