Post on 25-Feb-2018
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/~marinhomarinho@exatas.unisinos.br
PIPCABloco 6B quarto andarAv. Unisinos, 950So Leopoldo/RS CEP93022-000
Cristiano Andr da Costa
http://inf.unisinos.br/~caccac@exatas.unisinos.br
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.