Threads
Docente:
Rui Miguel Inácio
Introdução
Desde os primeiros momentos de surgimento
dos computadores, a preocupação sempre
foi a utilização eficiente do escasso hardware.
Para os sistemas computacionais modernos
que apresentam processadores multicores, a
utilização efectiva destes recursos são
efectivas com a utilização de Threads.
Os threads são uma unidade básica de
utilização da CPU; eles compreendem um ID
de thread, um contador de programas, um
conjunto de registros e uma pilha.
Conceito de Processo (cont.)
Programa é entidade passiva armazenada
em disco (arquivo executável); o processo
está ativo
Programa torna-se processo quando o arquivo
executável carregado na memória
Execução do programa iniciado através de
cliques do mouse GUI, entrada de linha de
comando de seu nome, etc
Um programa pode ter vários processos
Considere vários usuários executando o mesmo
programa
Arquitetura de servidores
multithreads
Vantagens
• Capacidade de resposta - pode permitir a
execução contínua se parte do processo for
bloqueado, especialmente importante para
interfaces de usuário
• Compartilhamento de recursos - Os threads
compartilham recursos de processo, mais fáceis do
que a memória compartilhada ou a passagem de
mensagens
• Economia – mais fáceis de criar que a criação de
processos, conversão de sobrecarga mais baixa do
que a mudança de contexto.
• Escalabilidade - o processo pode tirar proveito de
arquiteturas multiprocessador
Programação multicore
O paralelismo implica que um sistema poça executar mais
de uma tarefa simultaneamente
Concorrência suporta mais de uma tarefa esteja em
progresso
Processador / núcleo único, agendador que oferece
simultaneidade
Tipos de paralelismo
Paralelismo de dados - distribui subconjuntos dos mesmos
dados em vários núcleos, a mesma operação em cada
um
Paralelismo de tarefas - distribuição de threads em
núcleos, cada thread executando operação exclusiva
À medida que o número de threads cresce, o suporte
arquitetónico para o encadeamento também
As CPUs possuem núcleos, bem como threads de
hardware
Considere o Oracle SPARC T4 com 8 núcleos e 8 threads
de hardware por núcleo
Concorrência vs. Paralelismo
Processos simples e
multiThreads
Lei de Amdahl’s
Identifica ganhos de desempenho ao adicionar
núcleos a um aplicativo que possui componentes
em série e paralelos
S é uma parcela serial
N núcleos de processamento
Tipo de Paralelismo
Paralelismo de dados
▪ Consiste em dividir o conjunto de dados, de onde cada
porção seja executada com um thread específica e
em núcleo específico.
Paralelismo de tarefa
▪ Consiste em executar diferentes threads em diferentes
núcleos contudo, todos executando sobre os mesmos
dados.
Paralelismo de dados e de
tarefas
Dados
Paralelismo
de
Dados
Dados
Paralelismo
de
Tarefas
Lei de Amdahl
Identifica os ganhos de desempenho da adição de
núcleos adicionais a um aplicativo que tem componentes
seriais e paralelos
S é a porção de série e N núcleos de processamento
Ou seja, se a aplicação for 75% paralela / 25% serial,
passar de 1 para 2 núcleos resulta em uma aceleração de
1,6 vezes
À medida que N se aproxima do infinito, a aceleração
aproxima-se de 1 / S
A parte serial de um aplicativo tem um efeito
desproporcional no desempenho obtido pela adição de
núcleos adicionais
Mas será que a lei tem em conta os sistemas multicore
contemporâneos?
Lei de Amdahl
Threads de usuário e threads do
kernel
Threads de usuário - gerenciamento feito pela biblioteca
de threads no nível do usuário
Três bibliotecas de threads principais:
POSIX Pthreads
Threads do Windows
Threads do Java
Threads do kernel - Suportados pelo kernel
Exemplos – praticamente todos os sistemas operativos de
uso geral, incluindo:
Mac OS
Aplicações Linux
Mac OS X iOS
Androide
Threads de usuário e threads do
kernel
Modelos Multithreading
Muitos para um
Um-para-um
Muitos para muitos
Modelos Muitos para um
Muitos threads de nível de usuário mapeados para um
único thread do kernel
Um bloqueio de thread faz com que todos bloqueiem
Vários threads podem não ser executados em paralelo no
sistema multicore porque apenas um pode estar no kernel
de cada vez
Poucos sistemas atualmente usam este modelo
Exemplo
Solaris Green Threads
GNU Portable Threads
Modelos Um-para-um
Cada thread no nível do usuário é mapeado para um
thread do kernel
Criar um thread no nível do usuário cria um thread do
kernel
Mais concorrência do que muitos-para-um
Número de threads por processo às vezes restrito
devido à sobrecarga
Exemplo
Windows
Linux
Modelos Muitos para muitos
Permite que muitos threads de nível de usuário sejam
mapeados para muitos threads do kernel
Permite que o sistema operacional crie um número
suficiente de threads do kernel
Windows com o pacote ThreadFiber
Caso contrário, não é muito comum
Modelo de dois níveis
Semelhante ao M:M, exceto que ele permite que um
thread de usuário seja vinculado ao thread do kernel
Modelo de dois níveis
A biblioteca de threads fornece ao programador uma
API para criar e gerenciar threads
Duas formas principais de implementação Biblioteca
inteiramente no espaço do usuário
Biblioteca de nível kernel suportada pelo SO
Fim