1 / 22

Infra-Estrutura de Comunicação (IF678)

Infra-Estrutura de Comunicação (IF678). Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando . Aula Prática 03 – 2011.2. CIn/UFPE. Agenda: Programação Concorrente (Threads) Exercício Chat Exercício Selective Repeat.

millie
Download Presentation

Infra-Estrutura de Comunicação (IF678)

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. Infra-Estrutura de Comunicação(IF678) Davi Duarte CynthiaRaphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando Aula Prática 03 – 2011.2 CIn/UFPE

  2. Agenda: • Programação Concorrente (Threads) • Exercício Chat • Exercício SelectiveRepeat

  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

  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

  5. Programação Concorrente Fluxo único de execução Vários fluxos de execução tarefa 1 tarefa 1 tarefa 2 tarefa 3 tarefa 2 tarefa 3 cada fluxo possui uma pilha de execução

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

  7. 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.

  8. Estados de uma Thread

  9. 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.

  10. 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.

  11. Exemplo de threads Em java publicclass Conta {//... publicdouble saldo = 0; void creditar(doublevc) { saldo = saldo+vc; } void debitar(doublevd) { if(saldo>vd){ saldo = saldo-vd; } } }

  12. Exemplo de threads Em java publicclass Credito extends Thread { private Conta conta; privatedoubleval; public Credito(Conta c,double v) { conta = c; val = v; } publicvoidrun() { conta.creditar(val); } }

  13. Exemplo de threads Em java publicclass Debito extends Thread { private Conta conta; privatedoubleval; public Debito(Conta c, double v) { conta = c; val = v; } publicvoidrun() { conta.debitar(val); } }

  14. 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); } }

  15. Exemplo de threads Em java public class Receiver implements Runnable{ DatagramSocketrcvSock; DatagramPacketrcvPacket; AtomicBooleanstopped; intrcvPort; public Receiver(AtomicBoolean stopped) throws SocketException{ rcvSock = new DatagramSocket(3400); this.stopped = stopped; } publicvoidrun(){ 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())); } } }

  16. public class Sender implements Runnable{ BlockingQueue<String> blockQueue; AtomicBooleanstopped; DatagramSocketsendSock; DatagramPacketsendPkt; StringipAmigo; Stringmsg; byte [] buffer; Sender(AtomicBooleanstopped, BlockingQueue<String> blockQueue){ this.stopped = stopped; this.blockQueue = blockQueue; ipAmigo = "localhost"; } publicvoidrun (){ try { sendSock = new DatagramSocket(); } catch (Exception e) { } (continua)

  17. 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) {} } } }

  18. Exemplo de threads Em java public static void main(String[] args) throws Exception { AtomicBooleanstopped = new AtomicBoolean (false); BlockingQueue<String> blockQueue = new ArrayBlockingQueue<String>(5000); Sendersender = 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); }

  19. 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

  20. SelectiveRepeat • Implementar uma estrutura Cliente-Servidor: • Baseada no SelectiveRepeat • 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

  21. Projetos • Tanto o Chat quanto o SelectiveRepeat 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.

  22. Referências • http://www.coinfo.cefetpb.edu.br/professor/petronio/POO/Material/threads.ppt

More Related