Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouTainá Padua Alterado mais de 9 anos atrás
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) 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/
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.