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

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

Introdução a JCSP Augusto Sampaio (acas) Patrícia Muniz (pmf) Rafael Duarte (rmd)

Apresentações semelhantes


Apresentação em tema: "Introdução a JCSP Augusto Sampaio (acas) Patrícia Muniz (pmf) Rafael Duarte (rmd)"— Transcrição da apresentação:

1 Introdução a JCSP Augusto Sampaio (acas) Patrícia Muniz (pmf) Rafael Duarte (rmd)

2 Antes de JCSP... Implementação pode ser realizada em outra plataforma UML-RT CTJ (Biblioteca semelhante a JCSP) occam (“implementação” de CSP)... Mas o curso inclui apresentação apenas de JCSP e UML-RT

3 JCSP - Características gerais Biblioteca Java que implementa o modelo de comunicação e concorrência de CSP/occam (com restrições) Suporta o projeto orientado a processos Implementação com base no mecanismo de threads/monitor de Java Versões Base Edition Network Edition (suporte a distribuição)

4 JCSP - Características gerais Elementos de CSP disponíveis Canais Comunicação (também com buffer e multi) Composição seqüencial Paralelismo (não alfabetizado) Escolha externa (com restrições e extensões) Alguns operadores não implementados Hiding, interrupção, paralelismo alfabetizado, indexação,...

5 Processos em JCSP... Um processo é uma entidade autônoma (fluxo de execução independente) Encapsula estado (atributos) e métodos Construtores são públicos Comunicação com o ambiente via canais (como em CSP ou como cápsulas UML-RT) Comportamento ativo (fluxo) implementado pelo método run() (público)

6 Processos em JCSP... Um processo é um objeto de uma classe que implementa a interface CSProcess interface CSProcess { public void run(); } Toda classe que implementa CSProcess deve prover uma implementação de run()

7 ... private support methods (part of a run)... public void run() (process starts here) Estrutura de um processo class Example implements CSProcess { }... private shared synchronisation objects (channels etc.)... private state information... public constructors... public accessors(gets)/mutators(sets) (only to be used when not running)

8 Canais em JCSP... Um canal é um objeto de uma classe que implementa uma das interfaces: ChannelInput ChannelOutput ChannelInputInt ChannelOutputInt

9 Canais em JCSP Um canal carrega algum tipo de informação Canais podem levar informação a um processo (output channels), ou trazer informação de um processo (input channels)

10 Processos e canais Quando um processo dispara um evento através de um canal, permanece bloqueado até que seu receptor responda class P implements CSProcess{ ChannelOutput a; public void run() { a.write(...); } class P implements CSProcess{ ChannelOutput a; public void run() { a.write(...); } class Q implements CSProcess{ ChannelInput a; public void run() { x = a.read(); } class Q implements CSProcess{ ChannelInput a; public void run() { x = a.read(); }

11 interface ChannelOutput { public void write (Object o); } interface ChannelInput { public Object read (); } interface ChannelOutputInt { public void write (int o); } interface ChannelInputInt { public int read (); } Interfaces para canais de inteiros e objetos

12 One2OneChannel Any2OneChannel Não são canais broadcast! zero-buffering

13 One2AnyChannel Any2AnyChannel Não são canais broadcast! zero-buffering

14 Canais em JCSP

15 Como default, canais são (fully synchronised). Write -> Read, Read ->Write JCSP oferece um conjunto de plugins de canais que fornece uma variedade de tipos de bufferização (FIFO blocking, overflowing, overwriting, infinite) Ver jcsp.util. Canais de objetos …

16 public SuccInt (ChannelInputInt in, ChannelOutputInt out) { this.in = in; this.out = out; } public void run () { while (true) { int n = in.read (); out.write (n + 1); } private final ChannelInputInt in; private final ChannelOutputInt out; class SuccInt implements CSProcess { } SuccInt in out Exemplo

17 public PlusInt (ChannelInputInt in0, ChannelInputInt in1, ChannelOutputInt out) { this.in0 = in0; this.in1 = in1; this.out = out; }... public void run () private final ChannelInputInt in0; private final ChannelInputInt in1; private final ChannelOutputInt out; class PlusInt implements CSProcess { } in1 out in0 + + Exemplo

18 seqüencial seqüencial... public PlusInt (ChannelInputInt in0,...) public void run () { while (true) { int n0 = in0.read (); int n1 = in1.read (); out.write (n0 + n1); }... private final channels (in0, in1, out) class PlusInt implements CSProcess { } in1 out in0 + + Exemplo

19 Redes de processos Instâncias de processos (componentes) podem ser combinadas para formar uma rede A rede resultante é também um processo Componentes são interligados via conectores (instâncias dos canais) Os componentes executam em paralelo, como em um diagrama de estrutura UML- RT

20 A classe Parallel Parallel é um CSProcess cujo construtor tem como argumento um array de processos O método run() implementa a composição paralela dos processos argumentos A semântica é a mesma do operador de CSP || [Hoare]: o método run() termina apenas quando todos os argumentos finalizam com sucesso

21 public void run () { } in1 out in0 + + while (true) { parRead.run (); out.write (readIn0.getValue() + readIn1.getValue()); } ProcessReadInt readIn0 = new ProcessReadInt (in0); ProcessReadInt readIn1 = new ProcessReadInt (in1); CSProcess parRead = new Parallel (new CSProcess[] {readIn0, readIn1}); em paralelo dos argumentos de entrada Leitura Exemplo Evite o uso de sets, ou métodos públicos além do run. É possivel colocar, mas não é recomendado

22 Mais sobre a classe Parallel Oferece métodos para adicionar ( addProcess ) e remover processos ( removeProcess ) Entretanto, estes métodos só devem ser invocados quando o objeto não está em execução (método run() ) Se invocados durante a execução, o efeito só ocorrerá após o final da mesma

23 Detalhes de implementação Um objeto JCSP Parallel executa os primeiros (n-1) componentes em threads separadas e o último componente na sua própria thread de controle. Quando Parallel.run() termina, o objeto Parallel guarda todas as threads para reuso, caso o Parallel execute novamente Processos como PlusInt geram o overhead de criação de threads apenas a primeira vez Portanto, definir/criar parRead fora do loop, ao invés de construí-lo anonimamente em cada iteração tem forte impacto em eficiência

24 Exercício Implemente em JCSP o processo Main Send (i) = chan ! i -> Send (i+1) Read = chan ? x -> Print(x); Read Print(x) =... Main = Send (0) || Read

25 public class Send implements CSProcess { private final ChannelOutputInt chan; private int i; public Send(ChannelOutputInt chan, int i) { this.chan = chan; this.i = i; } public void run() { while (true) { chan.write(i); i = i + 1; } Exercício 1 – processo Send

26 public class Read implements CSProcess { private final ChannelInputInt chan; public Read(ChannelInputInt chan) { this.chan = chan; } public void run() { while (true) { int i = chan.read(); System.out.println(i); } Exercício – processo Read

27 public class ExampleMain { public static void main (String[] args) { One2OneChannelInt chan = Channel.one2oneInt(); Send send = new Send(chan.out(),0); Read read = new Read (chan.in()); CSProcess[] parArray = {send,read}; Parallel par = new Parallel (parArray); par.run(); } Exercício – processo Main

28 public class ExampleMain { public static void main (String[] argv) { One2OneChannelInt chan1 = Channel.one2oneInt(); One2OneChannelInt chan2 = Channel.one2oneInt(); new Parallel ( new CSProcess[] { new Send (chan1.out()), new IdentityInt(chan1.in(), chan2.out()), new Read (chan2.in())} ).run (); } Exercício 2 – Comunicação Assíncrona SendIdentityRead chan1chan2

29 Composição seqüencial class Sequence (implements CSProcess) CSProcess cujo construtor tem como argumento um array de processos O método run() implementa a composição seqüencial dos processos argumentos.

30 Leitura e Instalação An Introduction to JCSP Base Edition (tutorial interessante, mas versão da biblioteca não é a mais atual) Versão mais atual Instalação


Carregar ppt "Introdução a JCSP Augusto Sampaio (acas) Patrícia Muniz (pmf) Rafael Duarte (rmd)"

Apresentações semelhantes


Anúncios Google