Sistemas Distribuídos - Multithreading

15
Multithreading Prof. Adriano Teixeira de Souza

Transcript of Sistemas Distribuídos - Multithreading

Page 1: Sistemas Distribuídos - Multithreading

Multithreading

Prof. Adriano Teixeira de Souza

Page 2: Sistemas Distribuídos - Multithreading

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

Page 3: Sistemas Distribuídos - Multithreading

Capacidade de Resposta

Compartilhamento de Recursos

Economia na criação de processos

Uso de Arquiteturas Multiprocessador

Prof. Adriano Teixeira de Souza

Page 4: Sistemas Distribuídos - Multithreading

Threads de Usuário ◦ Implementadas por bibliotecas

Threads de Kernel ◦ Suportadas diretamente pelo SO

Prof. Adriano Teixeira de Souza

Page 5: Sistemas Distribuídos - Multithreading

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

Page 6: Sistemas Distribuídos - Multithreading

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

Page 7: Sistemas Distribuídos - Multithreading

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

Page 8: Sistemas Distribuídos - Multithreading

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

Page 9: Sistemas Distribuídos - Multithreading

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

Page 10: Sistemas Distribuídos - Multithreading

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

Page 11: Sistemas Distribuídos - Multithreading

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

Page 12: Sistemas Distribuídos - Multithreading

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

Page 13: Sistemas Distribuídos - Multithreading

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

Page 14: Sistemas Distribuídos - Multithreading

Prof. Adriano Teixeira de Souza

Page 15: Sistemas Distribuídos - Multithreading

Prof. Adriano Teixeira de Souza