Programação Paralela e Distribuida Em Java

download Programação Paralela e Distribuida Em Java

of 111

Transcript of Programação Paralela e Distribuida Em Java

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    1/111

    PIPCA/UNISINOS 1/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java como Ferramenta para

    Programao Paralela e Distribuda

    Marinho Pilla BarcellosCristiano Andr da Costa

    PIPCA - Mestrado em Computao AplicadaCentro de Cincias Exatas e Tecnolgicas UNISINOS

    So Leopoldo/RS

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    2/111

    PIPCA/UNISINOS 2/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Desafios do Curso: conceitos

    Programao Paralela e Distribuda

    Processamento Paralelo

    Processamento de Alto Desempenho (PAD)

    Sistemas Distribudos

    Noes, mais que definies.

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    3/111

    PIPCA/UNISINOS 3/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Desafios do Curso: escopo multi-disciplinar

    Programao Orientada a Objetos

    Programao Concorrente

    Linguagem Java

    Redes de Computadores

    Processamento de Alto Desempenho

    Sistemas Distribudos

    (Simulao)

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    4/111

    PIPCA/UNISINOS 4/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Objetivos do Curso

    Contexto: Javacomo Ferramenta para ProgramaoParalela e Distribuda

    Descrever as facilidades relevantes em Java: threads,sincronizao, sockets, RMI

    Abordar Java para Processamento de Alto Desempenho

    Abordar Java para programao distribuda

    Mostrar (simulao de) algoritmos distribudos em Java

    Discutir algumas tendncias

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    5/111

    PIPCA/UNISINOS 5/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sumrio: metodologia

    I. Linguagem Java

    II. Threads

    III. Sincronizao

    IV. Comunicao em Rede com Sockets

    V. Java RMIVI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em Java

    IX. Tendncias

    X. Concluses Finais

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    6/111

    PIPCA/UNISINOS 6/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Linguagem Java: introduo

    Histrico

    Sun, 1995

    rpida popularizao

    Elementos:

    Linguagem- especificaoAPI- Application Program Interface

    JVM- Java Virtual Machine

    Edies SunJava 2Enterprise Edition (J2EE)

    Java 2 Standard Edition (J2SE)

    Java 2 Micro Edition (J2ME)

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    7/111

    PIPCA/UNISINOS 7/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java da Sun:

    Java 2 Enterprise Edition(J2EE)Tecnologia Java XML APIs necessrias aodesenvolvimento de servios Web:

    The Java API for XML Processing(JAXP)

    Soap with Attachments API for Java(SAAJ)

    The Java API for XML-based RPC(JAX-RPC)

    The Java API for XML Registries(JAXR)Tecnologias Web: usadas no desenvolvimento deaplicaes Web orientadas apresentao:

    Java ServletsJavaServer Pages

    Java Message Service

    Enterprise Bean Technology

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    8/111

    PIPCA/UNISINOS 8/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java da Sun:

    Java 2 Enterprise Edition (J2EE

    )J2EE baseada em um modelo de componentes, quebusca simplificar o desenvolvimento e implantao de

    aplicativos corporativos em rede, e para ambientesheterogneos (software e hardware)

    Reuso de software (via componentes)

    A arquitetura de componentes JavaBeans independente de plataforma

    Plataforma J2EE gerencia infra-estrutura e suporta

    servios web para permitir o desenvolvimento deaplicaes seguras, robustas e interoperveis (Sun)

    http://java.sun.com/products/javabeans/

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    9/111

    PIPCA/UNISINOS 9/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java da Sun:Java 2 Standard Edition

    (J2SE

    )J2SE oferece os elementos essenciais: compilador,ferramentas, ambiente de execuo (runtime) e APIs

    para escrever, implantar e rodar aplicaes e appletsusando Java

    Atualmente, est disponvel a plataforma Java 2

    Standard Edition (J2SE) 1.4.2 BetaO que promete o fornecedor:

    Version 1.4.2 Beta builds upon Java technology's cross-

    platform support and robust security model with new featuresand functionality, enhanced performance and scalability, andimproved reliability and serviceability.

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    10/111

    PIPCA/UNISINOS 10/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java da Sun:Java 2 Micro Edition

    (J2ME

    )Um ambiente de execuo Java otimizado paradispositivos que variam de um minsculo smart cardat

    um set-top box

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    11/111

    PIPCA/UNISINOS 11/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java da Sun:Java Naming and Directory Interface (JNDI)

    JNDI parte do Java 2 SDK 1.3+

    API oferece a aplicaes funcionalidade de nomeao ediretrio

    Independncia de implementao de servio dediretrio especfico (forma cannica de acesso)

    Java 2 SDK v1.3 inclui servios de diretrios para:

    LDAP: Lightweight Directory Access Protocol

    CORBA/COS: Common Object Request Broker ArchitectureCommon Object Services name service

    RMI: Java Remote Method Invocation Registry

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    12/111

    PIPCA/UNISINOS 12/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java da Sun:Java Naming and Directory Interface (JNDI)

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    13/111

    PIPCA/UNISINOS 13/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java da Sun:The Java Community Process(JCP)

    o frum utilizado para dirigir os rumos do Java

    Seu papel desenvolver e revisar as especificaes detecnologias de Java, implementaes de referncia, ekits de compatibilizao

    Criado pela Sun Microsystems, evoluo do processoinformal que foi estabelecido no incio de Java uma organizao aberta, composta dedesenvolvedores Java e licencirios

    participao no JCP aberta a qualquer um

    procedimentos do JCP regulamentam e burocratizam

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    14/111

    PIPCA/UNISINOS 14/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    The Java Community Process(JCP):os 4 passos principais

    Iniciao: especificao iniciada pelos membros dacomunidade e aprovada para desenvolvimento pelo

    Comit ExecutivoDraftda Comunidade: grupo de experts formado paradesenvolver um primeiro draftda especificao que

    comunidade revisa e ento submetido ao ComitEspecificao completa, draftpblico e final:

    Manuteno: a especificao completa, implementao

    de referncia, e kit de compatibilidade tecnolgica soatualizados em resposta a requisies, e o Comitdecide quais podem ser executadas logo e quais devem

    ser revisadas por um grupo de experts

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    15/111

    PIPCA/UNISINOS 15/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    The Java Community Process(JCP):os 4 passos principais

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    16/111

    PIPCA/UNISINOS 16/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    The Java Community Process(JCP):Java Specification Requests(JSRs)

    Java Specification Requestsou JSRs so as descriesreais das especificaes propostas e finais para a

    plataforma JavaSo como RFCs

    Existe uma gama de JSRs em desenvolvimento, reviso

    e aprovao pela comunidade, sob tutela do JCP (doComit Executivo)

    Vide http://jcp.org/en/jsr

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    17/111

    PIPCA/UNISINOS 17/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java: caractersticas da plataforma

    Linguagem orientada a objetos

    Linguagem sem apontadores, apenas referncias

    Sem dealocao de objetos (coletor de lixo)

    Arquitetura para tratamento de excees

    Suporte programao concorrente

    Suporte a aplicaes na Internet

    Internacionalizao

    Frameworkde colees(conjuntos, listas, mapas...)

    Interface grfica

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    18/111

    PIPCA/UNISINOS 18/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Java: mecanismos relevantes programaoparalela/distribuda

    Threads

    Sincronizao

    Sockets

    RMI - Remote Method Invocation

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    19/111

    PIPCA/UNISINOS 19/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sumrio

    I. Linguagem Java

    II. Threads

    III. Sincronizao

    IV. Comunicao em Rede com Sockets

    V. Java RMI

    VI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em Java

    IX. Tendncias

    X. Concluses Finais

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    20/111

    PIPCA/UNISINOS 20/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Threads: justificativa

    Simplificam programao quando h tarefasindependentes

    E/S no bloqueante:

    em outras linguagens e sistemas, a execuo de operaesde E/S no bloqueantes pode ser por (a) multiplexao

    (chamada select), (b) polling, ou (c) sinaisem Java, devem ocorrer via threads

    Execuo de evento assncrono em um tempo futuro:

    em Java no h programao de alarmes e temporizadores

    deve-se usar uma thread que dorme o tempo necessrio

    Execuo de algoritmos paralelos em multi-

    processadores

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    21/111

    PIPCA/UNISINOS 21/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Threads: em Java

    Em Java, threads fazem parte da linguagem

    Implementao das threads (pela JVM) pode ser

    green threads

    native threads

    Modelo de threads x desempenhoCriao de threads pode ser por...

    herana (extends Thread)

    interface (imlements Runnable)

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    22/111

    PIPCA/UNISINOS 22/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Threads: criao por herana

    Classe de usurio que representa a thread herda daclasse Thread

    Mtodostart()deve ser invocado sobre umainstncia da classe de usurio, para ativao da thread

    Leva execuo do mtodo run(), da classe dousurio, que deve implementar este mtodo

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    23/111

    PIPCA/UNISINOS 23/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Threads: criao por interface

    Interface Runnable, que contm mtodo run(), estendida pela classe de usurio que rodar a thread

    Isto declara que os objetos dessa classe soexecutveis

    Ento cria-se uma thread (instncia de Thread)

    passando-se como argumento a referncia a tal objetoexecutvel

    Inicia a thread criada com start()

    Possui a vantagem de permitir a herana de outraclasse, que no Thread

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    24/111

    PIPCA/UNISINOS 24/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Threads: exemplos de mtodos

    t.isAlive()thread t est viva?

    t.join([ms])espera pela morte da thread t [no mximo ms milliseg]

    t.interrupt()interrompe uma thread t em sleep, join ou wait (+tarde)

    static boolean interrupted()verifica se a thread corrente foi interrompida

    t.isInterrupted()

    verifica se a thread t foi interrompidastatic sleep(ms)faz thread corrente dormir por um intervalo de tempo

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    25/111

    PIPCA/UNISINOS 25/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Threads: outros

    Threads podem criar variveis locais (ThreadLocal)

    Escalonamento de threads por prioridade preemptiva

    prioridades (MAX_PRIORITY, MIN_PRIORITY)

    escalonador preempta thread de menor prioridade

    escalonamento de threads de igual prioridade em aberto(cooperativo ou preemptivo)

    Novidades na JDK1.4 (java.util): classes TimereTimerTask, usadas para programar callouts

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    26/111

    PIPCA/UNISINOS 26/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sumrio

    I. Linguagem Java

    II. Threads

    III. Sincronizao

    IV. Comunicao em Rede com Sockets

    V. Java RMIVI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em Java

    IX. Tendncias

    X. Concluses Finais

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    27/111

    PIPCA/UNISINOS 27/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sincronizao: condies de corrida

    class LigaVerifica {

    private int a = 0; private long b = 0;

    void liga() { a = 1;

    b = -1; } boolean verifica() { // deve retornar sempre true, pois // ou a=0 e b=0 ou ento a=1 e b=-1 // a = 1 e b = 0 nunca ocorre, retornaria falso

    return ((a == 0) ||(b == -1 && a == 1));

    }}

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    28/111

    PIPCA/UNISINOS 28/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sincronizao: condies de corrida

    class LigaVerifica { private int a = 0;

    private long b = 0;

    void liga() { a = 1; // se perde CPU aqui?

    try { Thread.sleep(1);} catch (InterruptedException ie) { }b = -1;

    } boolean verifica() { // nem sempre retornar true, pois

    // a = 1 e b = 0 pode ocorrer return ((a == 0) ||

    (b == -1 && a == 1)); }}

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    29/111

    PIPCA/UNISINOS 29/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sincronizao em Java

    Cada thread pode modificar valores na memriaindependentemente das demais

    Operaes de alterao de variveis so atmicasapenas para tipos nativos (e exceto long/double)

    Necessidade de sincronizao no acesso a dados

    compartilhados entre as threads

    Sincronizao est baseada em monitorese variveiscondicionais

    Na classe Object, existe um lock, e synchronizedpode modificar um mtodo para que tenha que adquiriro lock antes de executar, e o libere aps

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    30/111

    PIPCA/UNISINOS 30/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sincronizao: exemplo synchronized

    class LigaVerifica { private int a = 0; private long b = 0;

    synchronizedvoid liga() { a = 1;

    try { Thread.sleep(1);} catch (InterruptedException ie) { }b = -1;

    } synchronizedboolean verifica() {

    return ((a == 0) ||(b == -1 && a == 1)); }}

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    31/111

    PIPCA/UNISINOS 31/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sincronizao com wait/notify

    E quando uma thread precisa esperar por uma outracondio (p.ex., varivel se torne verdadeira)?

    Par wait/notify evita um polling peridico do valor deuma varivel

    Com wait(),thread abdica do lock e bloqueia

    Espera uma notificao de outra thread, quando tentaento readquirir o lock

    Thread acordada com obj.notify(),obj.notifyAll()ou t.interrupt() (excesso)

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    32/111

    PIPCA/UNISINOS 32/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sincronizao com wait/notify: mtodos

    Object - wait()

    bloqueia a thread corrente no monitor do objeto at que

    uma outra thread faa uma notificao

    Object - notify()

    acorda uma thread que esteja bloqueada no monitordesse objeto

    Object - notifyAll()

    acorda todas threads que estejam bloqueadas nomonitor desse objeto

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    33/111

    PIPCA/UNISINOS 33/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sincronizao com wait/notify: exemplo

    public class MantemInteiroSincronizado { int compart = -1; boolean podeEscrever = true; public synchronized voidproduzInt(int val) { while (!podeEscrever){ // no a vez do produtor

    try { wait(); } catch (InterruptedException ie) { ... } } compart = val; podeEscrever = false;

    notify(); } public synchronized int consomeInt() { while (podeEscrever){ // no vez do consumidor try { wait(); } catch (InterruptedException ie) { ... }

    } podeEscrever = true; notify(); return compart; // ok ser aps notify...}}

    [DEITEL00]

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    34/111

    PIPCA/UNISINOS 34/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sumrio

    I. Linguagem Java

    II. Threads

    III. Sincronizao

    IV. Comunicao em Rede com Sockets

    V. Java RMIVI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em Java

    IX. Tendncias

    X. Concluses Finais

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    35/111

    PIPCA/UNISINOS 35/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Comunicao em Rede

    Objetivos

    envio de dados entre threads executando em

    computadores diferentes

    Premissas

    camada de transporte subjacente

    Internet

    Pacote java.net

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    36/111

    PIPCA/UNISINOS 36/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Comunicao via Sockets

    Sockets uma API que estende interface de arquivos

    Em Java

    Sockets = orientao a objetos + E/S Streams

    Elementos:

    Classes

    Streams

    Filtros

    Melhor suporte a heterogeneidadeserializao de objetos

    cdigos de caracteres (unicode)

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    37/111

    PIPCA/UNISINOS 37/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Comunicao via Sockets

    Troca de dados entre dois pontos de comunicao

    Ponto = um par endereo IP e porta

    Comunicao TCP x UDP

    Confiabilidade x desempenho na transmisso de dados

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    38/111

    PIPCA/UNISINOS 38/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Comunicao via Sockets com TCP

    Modelo Cliente/Servidor

    um lado(cliente) contacta outro lado (servidor)

    servidor deve estar esperando pelo cliente

    frequentemente implica relao cliente/servidor em termos deprocessamento

    combinao tpica: sockets TCP com threads no servidor

    Dois tipos de classes de Socket: cliente e servidor

    classe embute diversas operaes, mais alto-nvel

    class Socket

    class ServerSocket

    C S C

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    39/111

    PIPCA/UNISINOS 39/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Comunicao via Sockets com TCP

    Servidor

    ServerSocket(int port)

    cria socket e amarra (bind) com portaSocket accept()

    bloqueia esperando por conexo, retorna socket da novaconexo estabelecida

    Cliente

    Socket(InetAddress a, int port)

    cria socket, amarra com IP/porta e solicita conexo

    Socket(String nome_host, int port)idem

    E l S k TCP (1/2) Ti S

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    40/111

    PIPCA/UNISINOS 40/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Exemplo Sockets com TCP (1/2): TimeServer

    [Herald xxx]

    E l S k t TCP (2/2) Ti Cli t

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    41/111

    PIPCA/UNISINOS 41/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Exemplo Sockets com TCP (2/2): TimeClient

    [Herald xxx]

    Exemplo Sockets com TCP:

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    42/111

    PIPCA/UNISINOS 42/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Exemplo Sockets com TCP:DayTimeServer

    [Herald xxx]

    Uso de OutputStreamWriter

    Exemplo Sockets com TCP:

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    43/111

    PIPCA/UNISINOS 43/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    e p o Soc ets co CEchoClient

    [Herald xxx]

    Uso de InputStreamReader

    Comunicao via Sockets com UDP

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    44/111

    PIPCA/UNISINOS 44/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Comunicao via Sockets com UDP

    Comunicao com UDP

    sem confiabilidade, porm menor sobrecarga

    sem controle de congestionamento

    No h distino entre cliente e servidor

    Classe socket (class DatagramSocket)

    Classe pacote...

    DatagramPacket()Mesmo construtor usado para criar datagrama a enviare para criar rea na hora de receber

    Comunicao via Sockets com UDP

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    45/111

    PIPCA/UNISINOS 45/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Comunicao via Sockets com UDP

    connect(InetAddress a, int port)

    conecta (fixa) o socket a um endereo e porta

    send(DatagramPacket p)envia datagrama para destinatrio informado nodatagrama (ou para o destino 'fixado' se existe um)

    receive(DatagramPacket p)recebe datagrama de um origem qualquer

    close()

    fecha o socket

    Exemplo Sockets com UDP:

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    46/111

    PIPCA/UNISINOS 46/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    po trivial envio de uma datagrama

    [DEITEL00]

    $ java DatagramExampleThis packet is addressed to

    metalab.unc.edu/152.2.210.81 on port 7

    There are 15 bytes of data in the packet

    This is a test.

    Exemplo Sockets com UDP (1/5):

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    47/111

    PIPCA/UNISINOS 47/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    p ( )ReceiverThreadem UDPEchoClient

    Exemplo Sockets com UDP (2/5):

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    48/111

    PIPCA/UNISINOS 48/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    SenderThreadem UDPEchoClient

    Exemplo Sockets com UDP (3/5):

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    49/111

    PIPCA/UNISINOS 49/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    UDPEchoClient

    Exemplo Sockets com UDP (4/5):

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    50/111

    PIPCA/UNISINOS 50/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    UDPServer

    Exemplo Sockets com UDP (5/5):

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    51/111

    PIPCA/UNISINOS 51/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    UDPEchoServer

    Exemplo Sockets com UDP (1/2):i l i (M l i S d )

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    52/111

    PIPCA/UNISINOS 52/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    transmissor multicast (MulticastSender)

    Exemplo Sockets com UDP (2/2):t lti t (M lti tS iff )

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    53/111

    PIPCA/UNISINOS 53/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    receptor multicast (MulticastSniffer)

    Sumrio

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    54/111

    PIPCA/UNISINOS 54/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Sumrio

    I. Linguagem Java

    II. Threads

    III. Sincronizao

    IV. Comunicao em Rede com Sockets

    V. Java RMI

    VI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em JavaIX. Tendncias

    X. Concluses Finais

    Java RMI(R t M th d I ti )

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    55/111

    PIPCA/UNISINOS 55/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    (Remote Method Invocation)

    Similar RPC (Remote Procedure Call), pormorientada a objetos

    RMI permite invocar mtodos de objetos remotosusando a mesma sintaxe da invocao local

    Uso de objetos remotos no exatamente igual ao

    acesso local (no transparente)Pacote java.rmi

    Java RMI(Remote Method In ocation)

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    56/111

    PIPCA/UNISINOS 56/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    (Remote Method Invocation)

    Permite a programador criar aplicaes onde mtodosde objetos remotos podem ser invocados de outras

    JVMs, potencialmente em diferentes mquinasUm programa Java pode fazer uma chamada sobre umobjeto remoto aps obter a referncia ao objeto remoto

    Referncia pode ser obtida ou olhando no servio denomes oferecido pelo RMI ou recebendo a refernciacomo um argumento ou valor de retorno

    Cliente pode fazer chamada sobre objeto remoto em umservidor (este pode ser cliente de outros objetos)

    RMI usa serializao de objetospara codificar e

    decodificar parmetros, e no trunca tipos

    Java RMI

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    57/111

    PIPCA/UNISINOS 57/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Stubs e esqueletos (gerados pela ferramenta rmic)

    Objeto que faz invocao remota deve lidar com

    diferentes excees (RemoteExceptions)Interface remota define quais mtodos podem serinvocados por clientes remotos

    Definida ao estender a interface Remote

    Mtodos devem gerar a exceo RemoteException

    Tanto objetos locais como remotos podem aparecercomo argumentos e resultados na interface remota

    Java RMI:passagem de parmetros

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    58/111

    PIPCA/UNISINOS 58/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    passagem de parmetros

    Parmetros de mtodos: todos so de entrada

    Resultado do mtodo: nico parmetro de sada

    H trs casos:

    tipos primitivospassados por valor

    objetos que implementam Remote: sempre passada comouma referncia remota(pode ser usada para fazer chamadasRMI no objeto a que refere)

    objetos que no implementam Remote: so copiados e

    passados por valor - serializaopara transmitir parmetros eresultados

    Java RMI:RMIregistry

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    59/111

    PIPCA/UNISINOS 59/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    RMIregistry

    Deve executar em cada mquina que tenha objetosremotos

    Mantm tabela de mapeamento que transforma nomesno estilo URL para referncias a objetos naquelecomputador

    Nomes de objetos://nomeDoComputador:porta/nomeDoObjeto

    Java RMI

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    60/111

    PIPCA/UNISINOS 60/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Programao do servidor

    deve conter um mtodo main()que cria uma instncia de um

    objeto e associa (Naming.rebind()) ao RMIregistryo valor associado ao nome uma referncia remotaao objetoe seu tipo o da interface remota

    Programao do clienteprocura pelo objeto remoto para obter sua referncia(Naming.lookup())

    uma vez obtida a referncia, o cliente envia as invocaesremotas ao objeto

    Exemplo com Java RMI (1/5):quadro branco compartilhado

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    61/111

    PIPCA/UNISINOS 61/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    quadro branco compartilhado

    Quadro branco compartilhado:

    programa distribudo que permite a um grupo de usurios

    compartilhar uma viso de um desenho contendo objetosgrficos como retngulos, linhas e crculos

    Servidor mantm o estado atual. Principais mtodos:

    newShape: mtodo que permite a um cliente informar sobreos desenhos feitos pelo seu usurio

    allShapes: permite um cliente receber todos os desenhosfeitos por outros usurios

    getVersion: retorna a verso atual; a verso incrementadacada vez que um novo desenho chega no servidor

    [COULOURIS01]

    Exemplo com Java RMI (2/5):interfaces remotas do quadro branco

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    62/111

    PIPCA/UNISINOS 62/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    package examples.RMIShape;import java.rmi.*;

    import java.util.Vector;

    public interface Shapeextends Remote { int getVersion() throws RemoteException; GraphicalObject getAllState() throws RemoteException;

    }

    public interface ShapeListextends Remote { Shape newShape(GraphicalObject g) throws

    RemoteException;

    Vector allShapes()throws RemoteException; int getVersion() throws RemoteException; }}

    interfaces remotas do quadro branco

    Exemplo com Java RMI (3/5): servidor commtodo principal do quadro branco

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    63/111

    PIPCA/UNISINOS 63/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    mtodo principal do quadro branco

    package examples.RMIShape;import java.rmi.*;//import java.rmi.server.UnicastRemoteObject;

    public class ShapeListServer{ public static void main(String args[]){ System.setSecurityManager(newRMISecurityManager()); System.out.println("Main OK");

    try{ ShapeListaShapelist = new ShapeListServant(); System.out.println("After create"); Naming.rebind("ShapeList", aShapelist);

    System.out.println("ShapeList server ready");

    }catch(Exception e) { System.out.println("ShapeList server main " + e.getMessage()); } }

    }

    Exemplo com Java RMI (4/5): classe doservidor que implementa ShapeList

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    64/111

    PIPCA/UNISINOS 64/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    servidor que implementa ShapeList

    package examples.RMIShape;import java.rmi.*;import java.rmi.server.UnicastRemoteObject;import java.util.Vector;

    public class ShapeListServantextends UnicastRemoteObject implements ShapeList{ private Vector theList; private int version; public ShapeListServant()throws RemoteException{ theList = new Vector(); version = 0; } public Shape newShape(GraphicalObject g) throws

    RemoteException{ version++; Shape s = new ShapeServant(g, version); theList.addElement(s);

    return s; } public Vector allShapes()throws RemoteException{ return theList; } public int getVersion() throws RemoteException{ return version; }

    }

    Exemplo com Java RMI (5/5):classe no cliente para acessar quadro branco

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    65/111

    PIPCA/UNISINOS 65/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    classe no cliente para acessar quadro branco

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

    System.setSecurityManager(new RMISecurityManager()); ShapeListaShapeList = null; try{ aShapeList = (ShapeList) Naming.lookup("//any/ShapeList");

    System.out.println("Found server"); Vector sList = aShapeList.allShapes(); }catch (RemoteException e) { System.out.println("allShapes: " + e.getMessage()); }catch (Exception e) {

    System.out.println("Lookup: " + e.getMessage()); }}

    Sumrio

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    66/111

    PIPCA/UNISINOS 66/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    I. Linguagem Java

    II. Threads

    III. Sincronizao

    IV. Comunicao em Rede com Sockets

    V. Java RMI

    VI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em JavaIX. Tendncias

    X. Concluses Finais

    O Desempenho de Java: ruim

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    67/111

    PIPCA/UNISINOS 67/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Percepo geral que Java possui baixo desempenho(interpretada e demanda muita memria)

    Custo de ser projetada com independncia deplataformaem mente

    Fontes de ineficincia:

    interpretao de bytecodes

    gerncia de memria baseada em coleta de lixo

    caracteres Unicode

    Vantagens de Java so suficientes para fazer-nosreinventar tudo de novo?

    CACM Oct. 2001 - High Performance Java

    O Desempenho de Java: avanos

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    68/111

    PIPCA/UNISINOS 68/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Fraco desempenho uma limitao da implementaoda linguagem

    Evoluo das verses da plataforma JavaAvanos recentes:

    compilao mais eficiente

    compilao just-in-time

    compilao ahead-of-time

    Otimizao em tempo de execuo, com profilingdinmico do cdigo sendo executado

    O Desempenho de Java: avanos

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    69/111

    PIPCA/UNISINOS 69/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    O fornecedor diz que...

    a verso 1.4 da J2SE apresenta um aumento de 58% sobre a

    verso J2SE 1.3.1 com SPECjbb2000 Java BusinessBenchmark em um sistema cliente/servidor de trs camadas(Sun Microsystems)

    houve melhorias dramticas nas aplicaes cliente com

    JFC/Swing: 20 a 80% de ganho sobre a verso 1.3.1(http://java.sun.com/j2se/1.4/datasheet.1_4.html)

    O Desempenho de Java: GCJ

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    70/111

    PIPCA/UNISINOS 70/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    GCJ (The GNU Compiler for the Java ProgrammingLanguage) um compilador portvel, otimizador,ahead-of-timepara a linguagem de programao Java

    Pode compilar:

    cdigo fonte Java para cdigo de mquina nativo

    bytecode (arquivos .class) para cdigo de mquina nativoAplicativos compilados so ligados com o suporte deexecuo GCJ, libgcj, que oferece as bibliotecas de

    classes bsicas, um coletor de lixo e um interpretadorde bytecode

    A libgcj pode dinamicamente carregar e interpretar

    arquivos do tipo .class

    O Desempenho de Java: GCJ

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    71/111

    PIPCA/UNISINOS 71/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    A maioria das APIs especificadas por Java 2 sosuportadas pelo GCJ, incluindo colees, ligao emrede, reflexo e serializao

    AWT no atualmente suportada

    Depurao suportada atravs de verses recentes do

    GNU debugger, GDBMaiores informaes: http://gcc.gnu.org/java/

    Java em PAD: JavaGrande Forum

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    72/111

    PIPCA/UNISINOS 72/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Representa os interesses da comunidade PAD juntoaos desenvolvedores de Java

    http://www.javagrande.orgObjetivos:

    avaliar e melhorar a usabilidade do ambiente Java em

    aplicaes grandiosas (grandes desafios computacionais)unir a comunidade Java Grande para promover consensosobre requisitos

    cirar prottipos de implementaes, benchmarks, etc. paratornar Java mais adequada s aplicaes grandiosas

    Java em PAD: limitaes de Java

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    73/111

    PIPCA/UNISINOS 73/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Falta de arrays multi-dimensionais com formato regular,fixo:

    implementado como um array de arrays, onde cada arraypode ter um tamanho

    Verificao de excees

    ponteiros nulos ou acessos a elementos com ndices fora doarray

    alm disso, semntica impossibilita otimizao

    Suporte para nmeros complexos e outros sistemasaritmticos

    dados no primitivos so objetos, ao invs de tipos primitivosde baixo custo [Moreira01]

    Java em PAD: projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    74/111

    PIPCA/UNISINOS 74/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Como superar as limitaes?

    Projetos de Pesquisa na rea

    Ninja - Numerically INtensive JAva programmingexpanso semntica: tcnica em que o compilador procura porinvocaes de mtodos e as troca por cdigo eficiente.

    novas classes de arrays e nmeros complexos so criadascom intuito de criar regies livres do risco de exceo, sobreas quais o compilador pode ento executar as otimizaestradicionais, reorganizando o cdigo.

    Java otimizado obteve desempenho bastante prximo ao deFortran em muitos casos (mas sempre inferior)

    Java em PAD: projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    75/111

    PIPCA/UNISINOS 75/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Hyperion

    Baseado em uma mquina virtual distribuda que permite o

    compartilhamento de objetos entre threads distribudas em umagregado

    Esconde a existncia dos mltiplos processadores

    Comunicao entre threads se d atravs do

    compartilhamento de um espao comum deendereamento

    3 compilaes: primeiro compila executveis no formatoclass (bytecodes) para C, e ento de C para o formato nativoda arquitetura alvo

    Java em PAD: projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    76/111

    PIPCA/UNISINOS 76/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Mantra

    se baseia na utilizao de uma reimplementao mais

    eficiente de RMI no acesso a objetos remotosbasicamente mantm modelo de programao Java

    emprega um compilador Java que previamente (ahead of time)compila cdigo Java em formato binrio nativo da arquitetura

    Sumrio

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    77/111

    PIPCA/UNISINOS 77/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    I. Linguagem Java

    II. Threads

    III. SincronizaoIV. Comunicao em Rede com Sockets

    V. Java RMI

    VI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em JavaIX. Tendncias

    X. Concluses Finais

    Java e Programao Distribuda

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    78/111

    PIPCA/UNISINOS 78/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Apesar de seu uso em rede, Java apresenta limitaesno suporte programao distribuda:

    RMI possui duas semnticas diferentes para chamadas demtodos: a forma de construir objetos remotos no a mesmade objetos convencionais

    transformar objetos em objetos remotos requer uma grande

    modificao do cdigo existente por parte do programadorJava no suporta mobilidade de objetos

    mecanismos de comunicao de Java insuficientes para a

    programao distribuda:comunicaes explcitas atravs de sockets so muito baixo nvel

    RMI extremamente restritivo e pesado

    Java e Programao Distribuda:projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    79/111

    PIPCA/UNISINOS 79/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Diversos projetos atacam essas limitaes

    JavaParty

    introduz um novo modificador de classes remote que permitemarcar as classes que podero ser executadas remotamente

    um pr-processador transforma programas com o modificadorintroduzido em programas Java puro utilizando RMI paracomunicao com objetos alocados remotamente

    o programador no precisa mapear objetos remotos a nodosde rede: um ambiente de execuo em conjunto com o pr-

    processador tratam da distribuio dos objetosexistem duas verses do JavaParty: uma que utiliza omecanismo tradicional de RMI presente no JDK, outra queutiliza o KaRMI que uma reimplenetao de RMI mais rpida

    Java e Programao Distribuda:projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    80/111

    PIPCA/UNISINOS 80/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    ProActive PDC

    biblioteca 100% Java puro, que prov objetos remotostransparentes, chamadas assncronas e mecanismos desincronizao de alto nvel

    transparncia de localidade alcanada atravs do uso demecanismos de proxy, no qual um objeto local encapsula

    todos os detalhes de comunicaochamadas assncronas so implementadas segundo princpiowait-by-necessity: objetos retornam objetos futuros que agemcomo locais de armazenamento para o resultado de um

    mtodo chamado mas ainda no completado (execuo podecontinuar desde que no seja necessria a camada demtodos no objeto retornado, caso em que faria a chamadabloquear at o resultado ficar disponvel)

    Java e Programao Distribuda:projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    81/111

    PIPCA/UNISINOS 81/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Javab e Javar

    ferramentas para a deteco automtica e explorao deparalelismo implcito de laos em Java

    Javab trabalha em nvel de bytecode

    Javar um compilador reestruturador que transforma cdigojava seqencial em cdigo Java paralelo

    explorao do paralelismo feita atravs do uso domecanismo de threads j existente na linguagem Java

    Java e Programao Distribuda:projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    82/111

    PIPCA/UNISINOS 82/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Horb

    um Java ORB (Object Request Broker)

    a idia do projeto criar uma verso de Java distribuda quepermita a execuo de programas em ambientes distribudossem alterar a semntica de Java, permitindo interoperabilidadee portabilidade de programas e do prprio Horb entre

    diferentes arquiteturas constitudo de um compilador e um ambiente de execuo,ambos escritos em Java puro

    utiliza o mecanismo de proxy para permitir que um objetoinvoque mtodos remotos

    Java e Programao Distribuda:projetos de pesquisa

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    83/111

    PIPCA/UNISINOS 83/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    JPVM

    biblioteca que permite a troca de mensagens explcitas para odesenvolvimento de aplicaes paralelas em Java

    a interface suportada semelhante suportada pela bibliotecaParallel Virtual Machine (PVM) para as linguagens C e Fortran

    MPJ

    a idia do projeto suportar MPI (Message Passing Interface)em Java

    MPI uma biblioteca para programao distribuda e paralela,

    assim como PVM

    Sumrio

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    84/111

    PIPCA/UNISINOS 84/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    I. Linguagem Java

    II. Threads

    III. SincronizaoIV. Comunicao em Rede com Sockets

    V. Java RMI

    VI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em JavaIX. Tendncias

    X. Concluses Finais

    Simulao de Algoritmos Distribudos em Java:Algoritmos Distribudos

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    85/111

    PIPCA/UNISINOS 85/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Algoritmos distribudos so o alicerce de sistemasdistribudos

    Exemplos de tipos de algoritmos:eleio de um lder (anel, anel bi-direcional, arbitrria)

    determinao de rvore de menor caminho (abritrria sem

    peso, com peso)determinao de rvore de menor custo (abritrria com peso)

    conjunto independente mnimo (rede arbitrria sem peso)

    Simulao de Algoritmos Distribudos em Java:metodologia tpica para simulao

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    86/111

    PIPCA/UNISINOS 86/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Especificao do protocolo/algoritmo

    Implementao do protocolo em Java no Simmcast

    Definio de cenrios (topologia e outros parmetros)

    Execuo de experimentos com cenrios, variandosementes

    Coleta das informaes de sada e anlise dosresultados

    Simulao de Algoritmos Distribudos em Java:exemplo de topologia

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    87/111

    PIPCA/UNISINOS 87/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    70

    60

    50

    30

    10

    8030

    20

    40N10 N20 N50 N40

    N70

    N90

    N80

    N30

    Simulao de Algoritmos Distribudos em Java:framework de simulao Simmcast

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    88/111

    PIPCA/UNISINOS 88/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Framework orientado a objetos para simulao deprotocolos e sistemas distrobudos em Java

    Centrado no processo de prototipao edesenvolvimento de protocolos

    Permite descrio de modelos de simulao usando

    multi-threadingModelo genrico, modular e extensvel

    Simulao de Algoritmos Distribudos em Java:framework de simulao Simmcast

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    89/111

    PIPCA/UNISINOS 89/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Elementos bsicos necessrios para representar asimulao de uma rede no Simmcast:

    N - classe NodeThread - classe NodeThread

    Caminho - classe Path

    Grupo - classe GroupRede - classe Network

    Pacote - classe Packet

    Stream - subclasses de RandomStream

    Aprenda Simmcast em 5 slidesSlide 1: Defina nodos

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    90/111

    PIPCA/UNISINOS 90/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Cada entidade na simulao ser representada por um nodo: o seucomportamento ser ditado pelas threads que este contiver

    No incio da simulao, o mtodo begin()de cada nodo chamado:

    neste mtodo, crie suas threads e dispare-as chamando launch()

    public class ExemploNode extends Node {

    // atributos compartilhados por todas as threads do nodo int umAtributo; // setters pblicos acessveis pelo arquivo de configurao public void setUmAtributo(int valor_) { umAtributo = valor_; } // Crie threads e as dispare public void begin() {

    ExemploThread umaThread = new ExemploThread(this); umaThread.launch(); }}

    Aprenda Simmcast em 5 slidesSlide 2: Defina threads

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    91/111

    PIPCA/UNISINOS 91/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Suas threads iro conter o comportamento dos nodos (a lgica doprotocolo): redefina o mtodo execute()para que ele contenha o

    cdigo a executar (como o run()da Thread de Java)

    Em Java, construtores no so herdados por default: redefina oconstrutor de NodeThreade chame o super.

    public class ExemploThread extends NodeThread {

    ExemploNode nodo;

    // alimente o construtor do Simmcast e salve um handle do nodo

    public ExemploThread(Node nodo_) {

    super(nodo_);

    nodo = (ExemploNode)nodo_;

    }

    public void execute() { // adicione aqui sua logica

    }

    }

    Aprenda Simmcast em 5 slidesSlide 3: Defina redee main

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    92/111

    PIPCA/UNISINOS 92/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Defina uma classe redepara armazenar definies globais da simulao

    Na classe principal, faa trs coisas: (a) crie um objeto rede, (b) dispare

    a simulao com execute(), (c) tranque a execuo da thread principal

    durante a simulao

    public class ExemploNetwork extends Network { // um tipo de pacote public static PacketType EXEMPLO_TYPE = new PacketType();

    }

    public class Teste {

    public static void main(String S[]) { ExemploNetwork rede = new ExemploNetwork();

    if (S.length < 1) System.err.println("Passe um parmetro!"); rede.execute(S[1]); try { rede.join();

    } catch (Exception e) { System.out.println(e); } }

    }

    Aprenda Simmcast em 5 slidesSlide 4: Prepare o arquivo de configurao

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    93/111

    PIPCA/UNISINOS 93/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    # Parmetros em macro para maior convenincia

    macro !RECEPTORES "10"# Criando ns...new S ExemploNodenew R[1..!RECEPTORES] OutroTipoDeNode# Definindo um grupo multicast...new G simmcast.group.GroupG join R[1..!RECEPTORES]# Definindo atributos do usurioS setUmAtributo 12345# Definindo links com buffer=10, banda=1000, taxa de perda 1%# e delay descrito por uma distribuio normal

    # Caminhos so unidirecionais, portanto, para descrever links# bidirecionais, use pares de caminhos.new umaNormal arjuna.JavaSim.Distributions.NormalStream 50 10S addPath R[1..!RECEPTORES] 10 1000 umaNormal 0.01R[1..!RECEPTORES] addPath S 10 1000 umaNormal 0.01

    No arquivo de configurao, crie os ns e suas conexes e passeparmetros para seus objetos

    Aprenda Simmcast em 5 slidesSlide 5: Rodando!

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    94/111

    PIPCA/UNISINOS 94/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Finalmente, compile tudo e rode a classe principal com o arquivo desimulao:

    $ java Teste exemplo.sim

    Simulao de Algoritmos Distribudos em Java:framework de simulao Simmcast exemplo

    Cdi f

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    95/111

    PIPCA/UNISINOS 95/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Cdigo fonte

    Compilao

    $ ./compile.sh

    Execuo de simulao

    $ ./run_simulation.sh exampleusing-nam.sim

    $ more out

    Visualizao grfica animada (nam)

    Diagrama de tempo (Viewcast)

    Sumrio

    Li J

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    96/111

    PIPCA/UNISINOS 96/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    I. Linguagem Java

    II. Threads

    III. SincronizaoIV. Comunicao em Rede com Sockets

    V. Java RMI

    VI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII. Simulao de Algoritmos Distribudos em JavaIX. Tendncias

    X. Concluses Finais

    Java e Wireless(Tecnologia para Telefones Celulares)

    JSR 185 (d i d J T h l f th Wi l

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    97/111

    PIPCA/UNISINOS 97/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    JSR 185 (denominada Java Technology for the WirelessIndustry JTWI), especifica uma plataforma baseadaem MIDP 2.0 (Mobile Information Device Profile),

    Wireless Messaging Architecture, e Mobile Media API

    MIDP 2.0

    possui algumas excelentes facilidades para redes, incluindo acapacidade de receber conexes

    inclui uma API de jogos para jogos 2D

    Projeto de jogos multi-participante: evoluo lgica com

    MIDP so os jogos multi-participantes

    Java e Wireless(Technology for Mobile Phones)

    Jini Net ork Technolog e Ja aSpaces Technolog

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    98/111

    PIPCA/UNISINOS 98/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Jini Network Technology e JavaSpaces Technology

    com a popularizao da tecnologia Bluetooth, dispositivosnecessitam de uma tecnologia para permitir a descoberta de

    outros dispositivos e a cooperao entre eles

    Implementao de um Java Centric Operating SystemSavaJe OS (http://www.savaje.com/)

    SavaJe OS

    SavaJe OS oferece uma plataforma nativa Java para

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    99/111

    PIPCA/UNISINOS 99/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    SavaJe OS oferece uma plataforma nativa Java paraaplicativos wireless

    A plataforma SavaJe auto-suficiente e no demandaoutro kernel ou sistema operacional

    Mdulo de interface permite a customizao dainterface de usurio de um telefone celular com temas,servios e aplicaes

    Trabalho corrente para implantar SavaJe em uma gamade dispositivos portteis

    SavaJe OS

    SavaJe OS um sistema operacional e plataforma de

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    100/111

    PIPCA/UNISINOS 100/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    SavaJe OS um sistema operacional e plataforma deaplicativos para SmartPhones e dispositivos sem-fio

    Objetivos chave de projeto da plataforma so:plataforma aberta e universal para telefones inteligentes

    plataforma aperfeioada para rodar aplicativos Java

    oferecer segurana completa para aplicativos residentes,distribudos e carregados da rede

    habilitar uma interface de usurio rica e customizvel,permitindo a configurao para colocao de uma marca ou

    provedor

    A plataforma SavaJe consiste de suas camadas: ocore (ncleo) e a customizable user experience

    SavaJe OS(The Core)

    O core um kernel otimizado para a arquitetura ARM

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    101/111

    PIPCA/UNISINOS 101/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    O core um kernel otimizado para a arquitetura ARM,que oferece drivers de dispositivos, codes de mdia,JVM e suporte de execuo

    O sistema SavaJe OS 2.0 suporta as seguintes APIs doJava:

    Personal Profile

    Java 2 Platform Micro Edition (J2ME) Mobile InformationDevice Profile (MIDP)

    APIs adicionais do Java incluiro suporte para

    comunicao serial, o Java Network Launch Protocol(JNLP), comunicao em rede e multimdia

    SavaJe OS(The User Experience Layer)

    Interface grfica de usurio - projetada para uma

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    102/111

    PIPCA/UNISINOS 102/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Interface grfica de usurio - projetada para umaconfigurao de um dispositivo SmartPhone, um displaycolorido de 220 por 176, entrada por um keypad, joystick, e

    sem uma touch screenInterface orientada a lista: menus mostrados como listas decones e texto, e sons podem ser customizados via temas

    Aplicativos - conjunto de aplicativos oferecido, incluindo:

    navegador completo HTML/WAP 1.2.1 (SSL, HTML, Applets, JavaScript, WML, XHTML)

    Messaging (POP3 E-mail, SMS, MMS)

    PIM (contatos, agenda, tarefas, notas)

    Multimdia (MP3, MPEG4)

    Jogos 3D avanados, jogos MIDP e aplicativos

    visualizao de documentos MS

    SavaJe OS Arquitetura

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    103/111

    PIPCA/UNISINOS 103/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    SavaJe OS Desempenho

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    104/111

    PIPCA/UNISINOS 104/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Mltiplicas camadas trazdiversos benefcios, incluindo modularidade,

    mas ao custo de desempenho

    JXTA

    Independente de linguagem

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    105/111

    PIPCA/UNISINOS 105/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Independente de linguagem

    portanto no especfico de Java, porm atualmente em Java

    plataforma e protocolo de transporte (mensagens soespecificadas em XML)

    JXTA uma especificaode protocolo P2P que incluiendereamento, roteamento e outros servios

    Permite que dispositivos em rede (de celulares/PDAssem-fio a PCs) se comuniquem e colaborem

    JXTA cria rede virtual sobreposta com espao deendereamento uniforme e funes de rede

    http://www.jxta.org/

    JXTA Protocolos

    Peer Resolver Protocol(PRP): permite enviar uma consulta

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    106/111

    PIPCA/UNISINOS 106/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    ( ) pa outro par

    Peer Discovery Protocol(PDP): permite descobrir anncios

    de outros paresPeer Information Protocol(PIP): permite consultar o estadocorrente de outro par

    Pipe Binding Protocol(PBP): permite amarrar um endpointde comunicao a um par fsico

    Endpoint Router Protocol (ERP): permite perguntar sobreinformaes de rota para envio de mensagens a outro par

    Rendezvous Protocol(RVP): mecanismo pelo qual parespodem assinar ou desassinar um servio de propagao

    Sumrio

    I. Linguagem Java

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    107/111

    PIPCA/UNISINOS 107/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    I. Linguagem Java

    II. Threads

    III. SincronizaoIV. Comunicao em Rede com Sockets

    V. Java RMI

    VI. Java e Processamento de Alto Desempenho

    VII. Java e Programao Distribuda

    VIII.

    Simulao de Algoritmos Distribudos em JavaIX. Tendncias

    X. Concluses Finais

    Concluses Finais

    Java: a computao reinventada...

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    108/111

    PIPCA/UNISINOS 108/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    p

    Em frentica evoluo, a cultura Java se transforma a

    cada dia, com jargo, siglas, especificaes, etc.Impossvel acompanhar!

    Como linguagem Java superior s abordagens prviasJava a linguagem da Internet!

    Possui mecanismos que a tornam ideal para

    desenvolvimento de sistemas paralelos e distribudos

    Desempenho o primeiro desafio sendo atacado

    Contatos e Oportunidades

    Informtica/UNISINOS

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    109/111

    PIPCA/UNISINOS 109/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Graduao Bacharelado Cincia da Computao, Anlisede Sistemas

    GRef Graduao de Referncia em Eng. Computao

    Especializao em Redes de Computadores, SoftwareLivre

    Mestrado PIPCA

    PIPCA Mestrado em Computao

    Redes de Computadores, Processamento de Alto

    Desempenho e Sistemas Distribudos

    Outras reas: Inteligncia Artificial, Computao Grfica,Bioinformtica, Computao Cientfica...

    Contatos e Oportunidades

    Marinho P. Barcellos

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    110/111

    PIPCA/UNISINOS 110/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    http://inf.unisinos.br/[email protected]

    PIPCABloco 6B quarto andarAv. Unisinos, 950So Leopoldo/RS CEP93022-000

    Cristiano Andr da Costa

    http://inf.unisinos.br/[email protected]

    Obrigado

  • 7/25/2019 Programao Paralela e Distribuida Em Java

    111/111

    PIPCA/UNISINOS 111/111ERI 2003 - Java como Ferramenta para Programao Paralela e Distribuda

    Use GNU/Linux!

    Meu obrigado comunidade de software livre,pois ela me permitiu preparar essa apresentaointeiramente livre de software fechado e proprietrio.