introdução a jcsp
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/1.jpg)
Introdução a JCSP
Augusto Sampaio (acas)Patrícia Muniz (pmf)Rafael Duarte (rmd)
![Page 2: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/2.jpg)
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
![Page 3: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/3.jpg)
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)
![Page 4: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/4.jpg)
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, ...
![Page 5: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/5.jpg)
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)
![Page 6: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/6.jpg)
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()
![Page 7: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/7.jpg)
... private support methods (part of a run) ... public void run() (process starts here)
Estrutura de um processoEstrutura de um processoclass 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)
![Page 8: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/8.jpg)
Canais em JCSP ... Um canal é um objeto de uma classe
que implementa uma das interfaces:• ChannelInput• ChannelOutput• ChannelInputInt• ChannelOutputInt
![Page 9: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/9.jpg)
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)
![Page 10: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/10.jpg)
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(); }}
![Page 11: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/11.jpg)
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
![Page 12: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/12.jpg)
One2OneChannelOne2OneChannel
Any2OneChannelAny2OneChannel
![Page 13: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/13.jpg)
One2AnyChannelOne2AnyChannel
Any2AnyChannelAny2AnyChannel
![Page 14: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/14.jpg)
Canais em JCSP
![Page 15: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/15.jpg)
Como default, canais são (fully synchronised).
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 … Canais de objetos …
![Page 16: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/16.jpg)
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 {
}
SuccIntSuccIntin out
Exemplo
![Page 17: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/17.jpg)
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
outin0++
Exemplo
![Page 18: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/18.jpg)
seqüencialseqüencial seqüencialseqü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
outin0++
Exemplo
![Page 19: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/19.jpg)
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
![Page 20: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/20.jpg)
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
![Page 21: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/21.jpg)
public void run () {
}
in1
outin0++
while (true) { parRead.run (); out.write (readIn0.value + readIn1.value); }
ProcessReadInt readIn0 = new ProcessReadInt (in0); ProcessReadInt readIn1 = new ProcessReadInt (in1);
CSProcess parRead = new Parallel (new CSProcess[] {readIn0, readIn1});
em paralelo dos em paralelo dos argumentos de argumentos de entrada Leituraentrada Leitura
Exemplo
![Page 22: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/22.jpg)
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
![Page 23: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/23.jpg)
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 parRead fora do loop, ao invés de construí-lo anonimamente em cada iteração tem forte impacto em eficiência
![Page 24: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/24.jpg)
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
![Page 25: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/25.jpg)
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
![Page 26: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/26.jpg)
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
![Page 27: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/27.jpg)
public class ExampleMain { public static void main (String[] args) {
One2OneChannelInt chan = Channel.one2oneInt();
Send send = new Send(chan.out()); Read read = new Read (chan.in()); CSProcess[] parArray = {send,read}; Parallel par = new Parallel (parArray); par.run(); } }
Exercício – processo Main
![Page 28: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/28.jpg)
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
Send Identity Readchan1 chan2
![Page 29: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/29.jpg)
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.
![Page 30: Introdução a JCSP](https://reader033.vdocuments.com.br/reader033/viewer/2022051401/56814011550346895dab52d8/html5/thumbnails/30.jpg)
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 atualhttp://www.cs.kent.ac.uk/projects/ofa/jcsp/jcsp1-0-rc7/jcsp-docs/
Instalaçãohttp://www.cs.kent.ac.uk/projects/ofa/jcsp/