Sistemas Distribuídos - Multithreading
-
Upload
adriano-teixeira-de-souza -
Category
Technology
-
view
1.884 -
download
0
Transcript of Sistemas Distribuídos - Multithreading
Multithreading
Prof. Adriano Teixeira de Souza
Thread (lightweight process) é uma unidade
básica de utilização da CPU, compreendendo um
id, um contador de programa, registradores e
pilha
Compartilha seção de código, seção de dados e
outros recursos do SO pertencentes ao um
mesmo processo
Prof. Adriano Teixeira de Souza
Capacidade de Resposta
Compartilhamento de Recursos
Economia na criação de processos
Uso de Arquiteturas Multiprocessador
Prof. Adriano Teixeira de Souza
Threads de Usuário ◦ Implementadas por bibliotecas
Threads de Kernel ◦ Suportadas diretamente pelo SO
Prof. Adriano Teixeira de Souza
A maioria das linguagens de programação não
permite programação de atividades concorrentes
Normalmente as linguagens disponibilizam
chamadas ao SO ◦ A biblioteca Win32 fornece um conjunto de APIs para
efetuar multithreading em aplicações nativas Windows
◦ Pthreads fornece uma biblioteca para threads em
sistemas POSIX, como linux
◦ C-threads no Mach
◦ Threads no Solaris
Prof. Adriano Teixeira de Souza
Historicamente a linguagem ADA (DoD) disponibilizou primitivas de concorrência porém a linguagem não popularizou-se no meio acadêmico e comercial
Java notavelmente é a única linguagem de uso geral e popular a disponibilizar as primitivas de concorrência para o programador de aplicativos (threads) ◦ Linguagens como C, C++ e Delphi fazem
chamadas a primitivas de multithreading do SO
Todo programa java possui pelo menos um thread de controle ◦ main executa num thread na JVM
Prof. Adriano Teixeira de Souza
Explicitamente pode-se criar uma classe derivada da classe Thread, do package java.lang
É necessário redefinir o método run(), que realmente realiza o trabalho
O método start() cria efetivamente a thread ◦ Aloca memória e inicializa um novo thread na JVM
◦ Chama run() para tornar o thread passível de execução
Construtores: ◦ public Thread (String threadName)
◦ public Thread()
Prof. Adriano Teixeira de Souza
Alternativamente pode-se criar uma classe que implementa a interface Runnable public interface Runnable {
public abstract void run();
}
Toda classe que implementa Runnable deve definir o método run() class Teste implements Runnable {
public void run() {
}
}
Prof. Adriano Teixeira de Souza
start(): inicia a execução da thread (método run)
suspend(): suspende a execução da thread que está executando
sleep(): faz a thread que está executando dormir por um tempo determinado
yield(): faz a thread que está executando dormir por um tempo indeterminado
resume(): resume a execução de uma thread suspensa
stop(): termina a execução de uma thread; a thread não pode ser mais executada.
Prof. Adriano Teixeira de Souza
join(): método que espera o término da THREAD para qual foi enviada a mensagem para ser liberada.
interrupt(): método que interrompe a execução de uma THREAD.
interrupted(): método que testa se uma THREAD está ou não interrompida.
Prof. Adriano Teixeira de Souza
nascimento
mortomorto
pronto
executando
bloqueado
start
esperando
wait
adormecido
sleepcompleto
Inicia E/S
Conclusão E/S
Despachar
(alocar Processador)yeld
Notify
Notifyall
Tempo expira
Prof. Adriano Teixeira de Souza
Além do programa multithread, outros threads
executam assincronamente para a JVM ◦ Gerência de memória: coleta de lixo
◦ Eventos de temporização
◦ Controles gráficos
Prof. Adriano Teixeira de Souza
Tipicamente a JVM é implementada sobre um SO
host, ocultando detalhes de implementação
Não indica como threads serão mapeados ◦ Windows NT modelo 1-1
◦ Solaris 2 modelo N-1 e M-n posteriormente
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza