Threads PDF
Threads PDF
Muitas vezes, h necessidade de se fazer vrias coisas simultaneamente, ao mesmo tempo, paralelamente.
Para vrios programas distintos, normalmente o prprio sistema operacional gerencia isso atravs de vrios processos em paralelo.
que
rodam
Programao multi-thread
Programao Multithread um paradigma conceitual da programao pelo qual voc divide os programas em dois ou mais processos que podem ser executados paralelamente.
Programao multi-thread
Muitas vezes, o programa implementado no exige os recursos completos do computador. Por exemplo, o computador pode levar um minuto para ler os dados do usurio do teclado, mas o tempo em que a CPU estar envolvida nesse processo mnimo.
Programao multi-thread
Devido a isso, a CPU fica ociosa grande parte do seu tempo. O problema dos ambientes tradicionais de linha de execuo nica que voc precisa esperar que cada uma dessas tarefas termine para aps passar para a outra, ao invs de aproveitar o tempo ocioso da CPU para executar outra tarefas.
Fluxos de Execuo
Um programa sequencial consiste de um nico fluxo de execuo, o qual realiza uma certa tarefa computacional.
A maioria dos programas simples tem essa caracterstica: s possuem um nico fluxo de execuo. Por conseguinte, no executam dois trechos de cdigo simultaneamente.
Grande parte do software de maior complexidade escrito hoje em dia faz uso de mais de uma linha de execuo.
Exemplos de programas
Navegador (Browser)
Consegue fazer o download de vrios arquivos ao mesmo tempo, gerenciando as diferentes velocidades de cada servidor e, ainda assim, interagindo, mudando de pgina enquanto os arquivos esto sendo carregados. Permite que o usurio edite o arquivo enquanto ele ainda est sendo carregado do disco. Processamento assncrono (salvamento peridico).
Editor de textos
Threads
Thread = linha, fio Threads = fluxos de execuo que rodam dentro de um processo.
Thread = lightweight process Thread uma abstrao que permite que uma aplicao execute mais de um trecho de cdigo (ex: mais de um mtodo) simultneamente.
Threads e Processos
Existem duas caractersticas fundamentais que so usualmente tratadas de forma independente pelo S.O.
Propriedade de recursos
Trada dos recursos alocados aos processos, e que so necessrios para a sua execuo.
Ex: de tempos em tempos, o processo pode requerer mais memria, controlar arquivos, requerer dispositivos de E/S, etc.
Escalonamento
Relacionado unidade de despacho do S.O. Determina o fluxo de execuo (trecho de cdigo) que executado pela CPU. Tradicionalmente o processo est associado a:
Threads e Processos
Em um S.O. Multi-thread
Processos esto associados somente propriedade de recursos, e threads s atividades de execuo (threads constituem unidades de despacho).
Threads e Processos
Multithreading refere-se habilidade do S.O. Em suportar mltiplas threads de execuo em um mesmo processo.
Multithreading
Suporta uma nica thread. Suporta mltiplos processos mas apenas uma thread por processo Suportam mltiplas threads por processo.
Unix standard:
Multithreading
a unidade de alocao e proteo de recursos; Tem um espao de endereamento virtual que mantm a imagem do processo; Tem acesso controlado a arquivos e outros recursos. outros processos,
Multithreading
Um estado de execuo (pronta, bloqueada, ). Um contexto salvo quando no estiver executando. Uma pilha de execuo. Acesso a variveis locais prprias. Acesso compartilhado com outras threads do processo aos recursos do mesmo.
Multithreading
mais rpido criar uma Thread do que um processo mais rpido terminar uma Thread que um processo mais rpido chavear entre Threads de um mesmo processo do que entre processos Threads podem se comunicar sem invocar o ncleo j que compartilham memria e arquivos. Permite paralelismo de organizao do programa. atividades e melhor
Thread pode bloquear sem bloquear as outras threads do mesmo processo? Suspender um processo implica em suspender todas as threads deste processo (considerando que todas as threads compartilham o mesmo espao de endereamento)?
Swapping
Tipos de Threads
Nvel de usurio: user-level threads (ULTs) Nvel de kernel: kernel-level threads (KLTs)
Java Threads
Difcil de classificar como user thread ou kernel thread As threads Java so gerenciadas pela JVM. Threads em Java podem ser criadas das seguintes maneiras:
Fazendo extend da classe Thread Implementando a interface Runnable Criar um novo processo em java implica em criar uma nova JVM p/ rodar o novo processo.
Java
Componentes
JVM:
JVM
Programas Java compilados so bytecodes independentes de plataforma de execuo da JVM A JVM consiste de:
Carregador de classes (Class loader) Verificador de classes (Class verifier) Interpretador runtime (Runtime interpreter)
Java Threads
Toda aplicao Java tem pelo menos uma thread (sem considerar o system thread) Do ponto de vista do desenvolvedor, o programa comea com um thread, chamada de main thread. A main thread cria novas threads.
Java Threads
Cada thread associada com uma instncia da classe Thread. Duas estratgias possveis para criar uma thread:
Instanciando a classe Thread; Delegando a criao/gerencia da thread para o executor (high-level concurrency objects)
A aplicao que cria instncia de Thread deve fornecer o cdigo a ser executado na thread. Passando um objeto Runnable construtor da classe Thread: para o
Thread.sleep(t)
Faz com que a thread suspenda a execuo por um perodo Interrompe a execuo corrente da thread (para terminar ou para fazer outra coisa) Faz com a thread que esteja executando suspenda para que a thread t execute (at terminar)
Thread.interrupted()
t.join()
A interface Runnable
Para utilizar multithreads em Java necessrio instanciar um objeto de uma classe que estende a classe bsicaThread Uma vez que Java no possui herana mltipla, como eu posso utilizar um objeto, cuja classe j derivada, como no caso da ClasseThread?
public class Filho extends Pai extends Thread { . } // isto nao eh possivel em Java
A interface Runnable
Se a classe Filho implementar a interface Runnable, ela pode ser tratada como tal.
A interface Runnable
Cria-se uma thread (Classe Thread), passando para o seu construtor uma referncia do objeto que implementa a interface Runnable.
Thread uma_Thread = new Thread(Runnable obj_thread) Thread uma_Thread = new Thread(Runnable obj_thread, String nome_da_thread)
Contedo extra
User-level threads
O gerenciamento das threads feito pela aplicao O ncleo desconhece a existncia de threads. O chaveamento entre threads no requer privilgio de modo kernel
Isso elimina o gasto de dois chaveamentos de modo Um processo pode aplicar sua prpria poltica de escalonamento entre threads
User-level Threads
So implementadas atravs de bibliotecas (executam em qualquer S.O.). Chamada ao sistema bloqueia todas as threads de um processo. No aproveita os benefcios do multiprocessamento Exemplo:
User-level threads
Kernel-level Threads
O gerenciamento das threads feito pelo kernel. O kernel mantm a informao de contexto para processo e threads. O chaveamento das threads feito pelo kernel (escalonamento thread-basis)
O bloqueio de uma thread no implica no bloqueio das outras threads do processo As threads podem aproveitar a capacidade de multiprocessamento
Kernel-level Threads
porm a transferncia de controle entre threads de um mesmo processo requer chavamento para modo kernel. Windows 2k, Linux, e OS/2 so exemplos desta abordagem.
Kernel-level Threads
Modelo Muitos-para-Um
Muitas user-level threads mapeadas em uma nica kernel thtread. Modelo usado em sistemas que no suportam kernel threads.
Modelo Um-para-Um
Cada user-level thread mapeada em uma nca kernel thread Exemplos: Windows 95/98/NT/2000 e OS/2.
Modelo Muitos-para-Muitos
Permite que diferentes user-level threads de um processo possam ser mapeadas em kernel threads distintas. Permite ao S.O. Criar um nmero suficiente de kernel threads. Exemplo: Solaris 2, Tru64, Unix, Windows NT/2000 com ThreadFiber Package.
Pthreads
API padro POSIX (IEEE 1003.1c) para criao sincronizao de threads (user-level threads).
A API especifica o comportamento da biblioteca de threads (a implementao tarefa do desenvolvedor da biblioteca). Comum em sistemas operacionais UNIX. Ex: pacote LinuxThreads, que implementa o padro pthread http://pauillac.inria.fr/~xleroy/linuxthreads/
Um thread id Um register set reas separadas para user stack e kernel stack rea para armazenamento de dados privados.
Linux Threads
No linux as threads so referenciadas como task (tarefas). Implementa o modelo de mapeamento um-para-um. A criao de threads feita atravs da SVC (chamada ao sistema) clone(). Clone() permite tarefa filha compartilhar o mesmo espao de endereamento que a tarefa pai (processo).
Na verdade, criado um novo processo, mas no feita uma cpia, como no fork(); O novo processo aponta p/ as estruturas de dados do pai