Sistemas Distribuídos - Multithreading

adrianots 2,102 views 15 slides Jul 09, 2011
Slide 1
Slide 1 of 15
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15

About This Presentation

No description available for this slideshow.


Slide Content

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
morto
morto
pronto
executando
bloqueado
start
esperando
wait
adormecido
sleep
completo
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
Tags