1 / 30

Introdução a JCSP

Introdução a JCSP. Augusto Sampaio (acas) Patrícia Muniz (pmf) Rafael Duarte (rmd). 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.

aliya
Télécharger la présentation

Introdução a JCSP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 aprocessos • 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 interfaceCSProcess interface CSProcess { public void run(); } • Toda classe que implementa CSProcess deve prover uma implementação de run()

  7. Estrutura de um processo ... private support methods (part of a run) ... public void run() (process starts here) 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. class P implements CSProcess{ ChannelOutput a; public void run() { a.write(...); } } class Q implements CSProcess{ ChannelInput a; public void run() { x = a.read(); } } Processos e canais • Quando um processo dispara um evento através de um canal, permanece bloqueado até que seu receptor responda

  11. interface ChannelOutput { public void write (Object o); } interface ChannelOutputInt { public void write (int o); } interface ChannelInputInt { public int read (); } interface ChannelInput { public Object 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. Canais de objetos … • 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 (FIFOblocking, overflowing, overwriting, infinite) • Ver jcsp.util.

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

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

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

  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. in0 + out em paralelo dos argumentos de entrada Leitura in1 Exemplo public void run () { } ProcessReadInt readIn0 = new ProcessReadInt (in0); ProcessReadInt readIn1 = new ProcessReadInt (in1); CSProcess parRead = new Parallel (new CSProcess[] {readIn0, readIn1}); while (true) { parRead.run (); out.write (readIn0.getValue() + readIn1.getValue()); } 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 JCSPParallel 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. Exercício 1 – processo Send public classSendimplementsCSProcess{ privatefinalChannelOutputIntchan; private int i; publicSend(ChannelOutputIntchan, int i) { this.chan = chan; this.i = i; } public void run() { while (true) { chan.write(i); i = i + 1; } } }

  26. Exercício – processo Read public classReadimplementsCSProcess{ private finalChannelInputIntchan; publicRead(ChannelInputIntchan) { this.chan = chan; } public void run() { while (true) { int i = chan.read(); System.out.println(i); } } }

  27. Exercício – processo Main public class ExampleMain { public staticvoid main (String[] args) { One2OneChannelIntchan= 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(); } }

  28. chan1 chan2 Exercício 2 – Comunicação Assíncrona 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 (); } } Send Identity Read

  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) http://www.quickstone.com/resources/jcspnetworkedition/IntroductionToJCSP.pdf • Versão mais atual http://www.cs.kent.ac.uk/projects/ofa/jcsp/jcsp1-0-rc7/jcsp-docs/ • Instalação http://www.cs.kent.ac.uk/projects/ofa/jcsp/

More Related