Buscar

Introdução às Threads em Programação

Prévia do material em texto

THREADS Prof. Eng. Eduardo Juliano Alberti(Adpatado de Prof. Alessandro Brawerman)
INTRODUÇÃO
Sistemas Operacionais habilitavam computadores a executar diversos programas 
concorrentes, porém os programadores ainda não podiam especificar atividades 
concorrentes em seus programas.
A partir de 1980, a linguagem de programação Ada fornecer de maneira explícita, 
formas de criar programação concorrente (de forma primitiva, claro).
2
INTRODUÇÃO
Muitas linguagens hoje fornecem técnicas para permitir a programação concorrente 
através de threads. Cada thread dá a capacidade, ao programa, de executar uma 
tarefa de forma simultânea ao programa principal.
Esta técnica chama-se Multithreading. 
3
O QUE É THREAD
Um thread simboliza o fluxo de instruções que podem executar concorrentemente em 
um processo e cooperar para atingir uma meta em comum.
Um thread é um subconjunto de recursos contidos em um processo.
Um processo pode conter n Threads que podem executar simultaneamente diversas 
partes da inteligência de um processo.
4
MAS PORQUE UTILIZAR?
Durante o projeto do software pode-se especificar partes de código que serão
executadas independentemente do restante da aplicação. Isso melhora o
desempenho da aplicação e deixa mais simples exprimir tarefas que serão
executadas paralelamente.
5
MAS PORQUE UTILIZAR?
Uma aplicação pode ser executada sequencialmente, o que pode incidir em um
tempo considerável. Com o uso de Threads, uma aplicação pode ter seu tempo
requerido reduzido significativamente, pois várias tarefas serão executadas
paralelamente.
6
MAS PORQUE UTILIZAR?
Atividades, muitas vezes, dependem de algumas tarefas independentes. No caso,
por exemplo, de soluções que dependem de leitura de dados ou sincronia de
informações, um único processo sequencial deveria periodicamente parar sua
execução para realizar tais ações.
Em um sistema multhread tais tarefas são paralelizadas, ou seja, se tornam
independente do código principal. Isso facilita no processamento de dados. Desta
forma podemos afirmar que as threads trabalham de forma cooperativa.
7
MAS PORQUE UTILIZAR?
Se pensarmos desta forma, as threads tornam as interfaces gráficas mais
responsivas. Em um sistema monothread, sua aplicação para na espera de alguma
informação. Em uma interface gráfica isso não é admissível. Desta forma, threads
mantem tarefas ativas enquanto outras threads cuidam na interface gráfica.
8
ESTADOS DE UM THREAD
9
Criado e pronto para execução
Aguardando E/S
Processamento Finalizado
“pausado” por tempo determinado
Aguardando por um evento interno
É acordado por outro Thread
OPERAÇÕES DE THREAD
Assim como para processos, podemos:
 Criar
 Terminar
 Suspender
 Retomar
 Dormir
 Acordar
10
OPERAÇÕES DE THREAD
Porém algumas operações são um pouco diferentes das utilizadas para a criação de 
processos:
 Cancelar Threads: Um cancelamento não garante que a thread termine sua execução
 Associação de Threads: Threads podem criar threads. O pai não pode ser terminado até que todos os 
threads filhos estejam finalizados também. Nesse caso, caso o thread pai termine suas tarefas ele será 
posto em estado dormir até que os threads filhos retornem como terminados.
11
MODELOS DE THREAD
Existem 3 diferentes modelos de Threads que podem estar presentes em SOs. 
 Thread de Usuário
 Thread de Núcleo
 Thread Híbrida
12
THREAD DE USUÁRIO
Os threads de usuário executam operações em espaço de usuário. 
São criadas por bibliotecas em tempo de execução e não podem executar instruções 
privilegiadas nem acessar primitivas do núcleo de forma direta.
São também denominadas de Threads Muitos-para-um pois o SO mapeia todos os 
threads de um processo para um único contexto de execução.
13
THREAD DE USUÁRIO
14
THREAD DE USUÁRIO
O sistema operacional não está ciente da existência de múltiplos threads, bibliotecas 
de nível de usuário escalonam a execução
Os threads de usuário não precisam que o SO suporte threads.
Programadores podem ajustar a maneira na qual será realizado o escalonamento 
dos threads de modo a atender suas necessidades.
15
THREAD DE NÚCLEO
Nos threads de núcleo o sistema operacional mapeia cada thread para seu próprio 
contexto de execução, desta forma são também chamadas de threads um-para-um.
Os threads compartilham o espaço de endereçamento do seu processo.
16
THREAD DE NÚCLEO
17
THREAD DE NÚCLEO
Tal modelo permite que o núcleo despache threads para diversos processadores ao 
mesmo tempo.
O núcleo pode gerenciar cada thread individualmente, assim mesmo que algumas 
threads estejam bloqueadas dentro de um processo, o sistema ainda pode 
despachar threads prontas.
18
THREAD DE NÚCLEO
Porém tendem a ser menos eficientes que os threads de usuário, pois podem implicar 
no aumento da sobrecarga.
Dependem de sistemas que permitam o uso de Threads.
Tendem a consumir mais recursos.
19
THREAD HÍBRIDA
A implementação híbrida é a utilizada em sistemas Windows
Também chamada de Muitos-para-muitos
Nesta implementação muitos threads de usuários são mapeados para um conjunto de 
threads de núcleo, não obrigatoriamente 1:1.
20
THREAD HÍBRIDA
21
THREAD HÍBRIDA
Tais implementações são limitadas pois não possuem padrão estabelecido entre os 
sistemas operacionais. Algumas operações podem não estar disponíveis quando 
comparados os sistemas operacionais.
22

Continue navegando