0% acharam este documento útil (0 voto)
406 visualizações49 páginas

Threads PDF

O documento discute threads e programação concorrente. Ele explica que threads permitem executar várias tarefas simultaneamente dentro de um processo compartilhando seus recursos. Threads podem ser criadas em Java herdando a classe Thread ou implementando a interface Runnable. Threads melhoram o desempenho ao permitir que a CPU execute outra tarefa enquanto uma está bloqueada, aguardando E/I por exemplo.

Enviado por

Max Welton
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
406 visualizações49 páginas

Threads PDF

O documento discute threads e programação concorrente. Ele explica que threads permitem executar várias tarefas simultaneamente dentro de um processo compartilhando seus recursos. Threads podem ser criadas em Java herdando a classe Thread ou implementando a interface Runnable. Threads melhoram o desempenho ao permitir que a CPU execute outra tarefa enquanto uma está bloqueada, aguardando E/I por exemplo.

Enviado por

Max Welton
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 49

UFG - Instituto de Informtica

Curso: Cincias da Computao

Programao Orientada a Objetos


Prof.: Fabrzzio A A M N Soares [email protected] Aula 23 Threads

O que uma Thread?

Muitas vezes, h necessidade de se fazer vrias coisas simultaneamente, ao mesmo tempo, paralelamente.

Este tipo de termo aparece frequentemente na computao.

Para vrios programas distintos, normalmente o prprio sistema operacional gerencia isso atravs de vrios processos em paralelo.

O que uma Thread?

Threads so processos concorrentemente.

que

rodam

Podemos executar processos concorrentes no Java de duas formas:


herdando a classe Thread ou implementando a interface Runnable.

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.

Sequncia de instrues a serem executadas dentro de um programa.

Thread = lightweight process Thread uma abstrao que permite que uma aplicao execute mais de um trecho de cdigo (ex: mais de um mtodo) simultneamente.

Processos permite ao S.O. Executar mais de uma aplicao ao mesmo tempo.

Threads e Processos

Existem duas caractersticas fundamentais que so usualmente tratadas de forma independente pelo S.O.

Propriedade de recursos Escalonamento

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:

Um programa em execuo Um conjunto de recursos

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

S.O.s multithreading permitem mltiplas threads de execuo em um nico processo. MS-DOS:

Suporta uma nica thread. Suporta mltiplos processos mas apenas uma thread por processo Suportam mltiplas threads por processo.

Unix standard:

Windows 2000, Linux, Solaris, OS/2, Mach:

Multithreading

Em um ambiente multithread, um processo:


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

J uma thread apresenta:


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

Processo Mono e Multithreaded - Exemplo

Benefcios das Threads

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

Estados de uma Thread

Estados fundamentais: executando, pronta e bloqueada

Estados de uma Thread

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

O trmino de um processo implica no trmino de todas as threads do processo.

Tipos de Threads

A implementao de Threads pode ser feita em um dos nveis:


Nvel de usurio: user-level threads (ULTs) Nvel de kernel: kernel-level threads (KLTs)

Apenas em S.O.s c/ suporte a multithreading

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.

A JVM s suporta um processo

Java

Componentes

Especificao da linguagem de programao API Java JVM: Mquina Virtual Java

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)

Exemplo de criao de Thread em Java

Fazendo subclass de Thread (que tambm implementa Runnable)

Exemplo de criao de Thread em Java

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

Manipulando Threads em Java

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

A soluo encontrada em Java foi a utilizao de uma interface: Runnable

No caso, tem-se de implementar esta interface, que possui o mtodo run( ).


public class Filho extends Pai implements Runnable Ao implementar uma interface, a classe se capacita a ser tratada como se fosse um objeto do tipo da inteface implementada.

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

O escalonamento feito pela aplicao

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:

Posix Pthreads, Mach, c-threads e Solaris threads

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

O usurio enxerga uma API para threads do ncleo

No h cdigo de gerenciamento de threads na rea da aplicao

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

Combinando Modos (Solaris)

User-level e 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/

Windows 2000 Threads

Implementa o modelo de mapeamento umpara-um. Cata thread contm:


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

Você também pode gostar