Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia...

22
Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando

Transcript of Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia...

Page 1: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

Infra-Estrutura de Comunicação(IF678)

Aula Prática 03 – 2011.2

CIn/UFPE

Davi DuarteCynthia Raphaella

Ivan FrançaJéssica Barbalho

Larissa Paz Paulo Fernando

Page 2: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

2

Agenda:

Programação Concorrente (Threads) Exercício Chat Exercício Selective Repeat

Page 3: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

3

Programação Concorrente:

O termo programação concorrente é usado no sentido abrangente, para designar a programação paralela e a programação distribuída

Page 4: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

4

Objetivos da Programação Concorrente

Reduzir o tempo total de processamento múltiplos processadores

Aumentar confiabilidade e disponibilidade processadores distribuídos

Obter especialização de serviços sistemas operacionais simuladores

Implementar aplicações distribuídas correio eletrônico

Page 5: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

5

Programação Concorrente

Vários fluxos de execuçãoFluxo único de execução

tarefa 1

tarefa 2

tarefa 3

tarefa 1 tarefa 2 tarefa 3

cada fluxo possui uma pilha de execução

Page 6: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

6

Thread

É uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente.

Page 7: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

Estados de uma Thread

Criação: Neste estado, o processo pai está criando a thread que é levada a fila de prontos;

Execução: Neste estado a thread está usando a CPU;

Pronto: Neste estado a thread avisa a CPU que pode entrar no estado de execução e entra na fila de prontos;

Bloqueado: Neste estado, por algum motivo, a CPU bloqueia a thread, geralmente enquanto aguarda algum dispositivo de I/O;

Término: Neste estado são desativados o contexto de hardware e a pilha é desalocada.

Esperando e Finalizado.

Page 8: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

Estados de uma Thread

Page 9: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

Principais métodos em Java

start(): inicia a execução da thread (método run)

suspend(): suspende a execução da thread que está executando

sleep(): faz a thread que está executando dormir por um tempo determinado

yield(): faz a thread que está executando dormir por um tempo indeterminado

resume(): resume a execução de uma thread suspensa

stop(): termina a execução de uma thread; a thread não pode ser mais executada.

Page 10: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

Principais métodos em Java

join(): método que espera o término da THREAD para qual foi enviada a mensagem para ser liberada.

interrupt(): método que interrompe a execução de uma THREAD.

interrupted(): método que testa se uma THREAD está ou não interrompida.

Page 11: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

EXEMPLO DE THREADS EM JAVApublic class Conta {//...

public double saldo = 0;void creditar(double vc) {

saldo = saldo+vc;}void debitar(double vd) {

if(saldo>vd){ saldo = saldo-vd;}

}}

Page 12: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

EXEMPLO DE THREADS EM JAVA

public class Credito extends Thread {private Conta conta;private double val;public Credito(Conta c,double v) {

conta = c; val = v;

}public void run() {

conta.creditar(val);}

}

Page 13: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

EXEMPLO DE THREADS EM JAVA

public class Debito extends Thread {private Conta conta;private double val;public Debito(Conta c, double v) {

conta = c; val = v;}public void run() {

conta.debitar(val);}

}

Page 14: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

EXEMPLO DE THREADS EM JAVA

public class Teste {public static void main(String[] args) {

Conta c = new Conta();c.saldo=12;Thread a = new Credito(c, 23.0);Thread b = new Debito(c, 12.0);a.start(); b.start();System.out.println(c.saldo);

}}

Page 15: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

EXEMPLO DE THREADS EM JAVApublic class Receiver implements Runnable{

DatagramSocket rcvSock; DatagramPacket rcvPacket; AtomicBoolean stopped;

int rcvPort;

public Receiver(AtomicBoolean stopped) throws SocketException{

rcvSock = new DatagramSocket(3400);

this.stopped = stopped;

}

public void run(){

while(!stopped.get()){

byte [] receiveData = new byte [20];

rcvPacket = new DatagramPacket(receiveData, receiveData.length);

try {

rcvSock.receive(rcvPacket);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("Recebi : " + new String (rcvPacket.getData()));

}

}

}

15

Page 16: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

public class Sender implements Runnable{

BlockingQueue <String> blockQueue;

AtomicBoolean stopped;

DatagramSocket sendSock;

DatagramPacket sendPkt;

String ipAmigo; String msg; byte [] buffer;

Sender(AtomicBoolean stopped, BlockingQueue<String> blockQueue){

this.stopped = stopped;

this.blockQueue = blockQueue;

ipAmigo = "localhost";

}

public void run (){

try {

sendSock = new DatagramSocket();

} catch (Exception e) {

}

(continua)

16

Page 17: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

while(!stopped.get()){

try {

msg = blockQueue.take();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

sendPkt = new DatagramPacket(msg.getBytes(), msg.getBytes().length,

InetAddress.getByName(ipAmigo), 3400);

sendSock.send(sendPkt);

} catch (Exception e2) {}

}

}

}17

Page 18: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

EXEMPLO DE THREADS EM JAVApublic static void main(String[] args) throws Exception {AtomicBoolean stopped = new AtomicBoolean (false);BlockingQueue<String> blockQueue = new ArrayBlockingQueue<String>(5000);Sender sender = new Sender (stopped, blockQueue); Receiver rcver = new Receiver (stopped);blockQueue.add("Testando");blockQueue.add("Essa");blockQueue.add("Mer...");new Thread(sender).start();new Thread(rcver).start();//stopped.set(true);

}

18

Page 19: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

CHAT MULTIUSUÁRIO A descrição do projeto se encontra em:

http://cin.ufpe.br/~ilfn/Monitoria_Comunicacao/Aulas_Praticas/AulaPratica%203/especifica%e7%e3o_miniprojeto3.pdf As telas estão disponíveis em:

http://cin.ufpe.br/~ilfn/Monitoria_Comunicacao/Aulas_Praticas/Interface_Java.zip

19

Page 20: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

SELECTIVE REPEAT

Implementar uma estrutura Cliente-Servidor:

Baseada no Selective Repeat

Onde é possível realizar transferências de um arquivo qualquer (texto/binário)

A implementação do protocolo deverá ser feita na camada de aplicação, utilizando o protocolo UDP

20

Page 21: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

PROJETOS

Tanto o Chat quanto o Selective Repeat devem ser feitos em grupos de 3 pessoas.

Os grupos precisam ser definidos e postados na comunidade do Orkut até o dia 19/10.

A entrega deve ser feita até o dia 4/11, o monitor responsável será indicado na comunidade do Orkut, após a definição das equipes.

21

Page 22: Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – 2011.2 CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.

REFERÊNCIAS http://www.coinfo.cefetpb.edu.br/professor/

petronio/POO/Material/threads.ppt

22