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

01.3) Thread

Enviado por

Igor Vinicius
Direitos autorais
© © All Rights Reserved
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 DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
11 visualizações5 páginas

01.3) Thread

Enviado por

Igor Vinicius
Direitos autorais
© © All Rights Reserved
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 DOCX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 5

Thread

 Conceito criado para reduzir os tempos de criação, eliminação e troca de contextos de


processos.
 Possuem contexto simplificado, com contexto de hardware e software, mas
compartilham o espaço de endereçamento.
 Como compartilham o espaço de endereçamento, não existe proteção no acesso à
memória.
 Um thread pode alterar dados de outros!
 No multithreading de grão-fino:
o os threads devem ser comutados após cada instrução.
o Usada quando o processador lida com dois ou mais contextos de threads ao
mesmo tempo.
 No multithreading de grão-grosso:
o os threads devem ser comutados apenas após eventos significativos.
o Instruções de threads são executadas sucessivamente até que possa ocorrer
um evento e causar um atraso.
o Troca threads quando há uma protelação, menos eficiente do que a
granularidade fina.

Ambientes MonoThreadd:

 Suportam apenas um único thread em execução.

Ambientes multithread, temos:

 Um único processo
 Suportando múltiplos threads
 Cada qual associado a uma parte do código da aplicação
 Threads compartilham: Código, Dados e Arquivos
 Thread é um pequeno conjunto de instruções projetadas para serem agendadas e
executadas pela CPU de forma independente do processo-pai.

Threads não compartilham;

 Contador de programa;
 Registradores;
 Pilha;
 Estado.

Threads Compartilham:

 Seção de código
 Seção de dados
 E outros recursos do sistema operacional como arquivos abertos e sinais

Podem ser três tipos:

 Threads Modo Usuário (TMU) (usada por modo aplicação)


 Threads Modo Kernel (TMK) (usada por modo SO)
 Threads Modo Híbrido (Combina os modos pela aplicação e pelo SO)
Estados de uma threads

Estados novo e executável: Um novo thread inicia seu ciclo de vida no estado novo. Ela
permanece nesse estado até que o programa inicie a thread, o que a coloca no estado
executável.

Estado de espera: um thread executável transita para o estado de espera enquanto aguarda
outra thread realizar uma tarefa. Um thread em espera volta ao estado executável somente
quando outra thread a notifica para continuar a execução.

Estado bloqueado: Um thread executável passa para o estado bloqueado quando tenta
realizar uma tarefa que não pode ser concluída imediatamente e deve esperar
temporariamente até que a tarefa seja concluída.

Estado terminado: Um thread executável entra no estado terminado quando ela conclui com
sucesso suas tarefas ou é de outro modo terminada.

Espera com tempo - Timed waiting: A thread está esperando por um período de tempo
definido. Isso acontece, por exemplo, quando você usa métodos como sleep() ou wait(long
timeout).

Benefícios das múltiplas threads:

 Capacidade de resposta: Tornar uma aplicação interativa, permite que um programa


continue em execução, mesmo que parte dele esteja bloqueado ou executando uma
operação demorada.
 Compartilhamento de recursos: Os threads compartilham a memória e os recursos do
processo ao qual pertence, com isso permite que uma aplicação que tenha múltiplos
threads de atividades diferentes dentro do mesmo espaço de endereçamento.
 Economia: Threads compartilham os recursos do processo ao qual pertencem com isso
e mais econômico criar threads e permutar seus contextos.
 Escalabilidade: Os threads podem ser executados em paralelos em diferentes núcleos
de processamento.

OpenMP
 O OpenMP é um conjunto de diretivas de compilador assim como uma API para
programas escritos em C, C++ ou FORTRAN que dá suporte à programação paralela em
ambientes de memória compartilhada.
 OpenMP identifica regiões paralelas como blocos de código que podem ser executados
em paralelo.

- Diretivas:

 Regiões Paralelas: Quando OpenMP encontra a diretiva “#pragma omp parallel” ele
cria um número de threads equivalente ao número de núcleos de processamento do
sistema.
 Seções Críticas: #pragma omp critical: especifica a região de código que segue a
diretiva, como uma seção crítica em que somente um thread pode estar ativo de cada
vez. Dessa forma, o OpenMP garante que os threads não gerem condições de corrida.
 Seções Paralelas: Uma seção paralela OpenMP é um código OpenMP que permite
blocos separados de código serem executados em paralelo (ex. diversas sub-rotinas
independentes).
 Encadeamento de Construtores: OpenMP deve suportar nested parallelism, no caso
de existirem vários níveis de encadeamento, ou seja, uma região paralela pode conter
outras regiões paralelas.
 Taskwait: especifica uma espera na conclusão das tarefas filhas da tarefa atual
 Untied: Especifica que qualquer thread pode executar a tarefa após uma suspensão,
isso traz flexibilidade na execução das tarefas.

- Cláusulas:

 IF(expressão): Significa executar em paralelo se a expressão expr for avaliada como


verdade.
 Num_Threads(expr): Executa o bloco em paralelo com o número de threads indicada
na expressão.
 Private(List): Cláusula que define que as variáveis definidas em list são duplicadas em
cada threads e seu acesso e local privado.
 Shared(list): Cláusula que define que as variáveis definidas em list são partilhadas por
todos os threads ficando à responsabilidade do programador garantir o seu correto
manuseio.
 Default(none): Cláusula que define que o tipo de todas as variáveis envolvidas na
região paralela deve ser declarado explicitamente.
 OMP_GET_THREAD_NUM(): Função básica do OpenMP que retorna o identificador do
Thread corrente.
 OMP_GET_NUM_THREADS(): Função básica do OpenMP que retorna o número de
threads momentaneamente ativos.
 Reduction: Especifica que uma ou mais variáveis privadas para cada thread são objeto
de uma operação de redução no final da região paralela. É utilizada para realizar
operações de reduções em variáveis compartilhadas dentro de um bloco paralelo.
Uma operação de redução envolve combinar os resultados parciais calculados por
vários threads em um único resultado final. Isso é útil quando vários threads precisam
calcular valores independentes e, no final, esses valores precisam ser combinados em
um único resultado.
 Atomic: Garante que um local de armazenamento especifico seja acessado
atomicamente (garantindo que a operação seja executada sem interrupções de outras
threads), em vez de expô-lo à possibilidade de múltiplos threads de leitura e gravação
simultâneos que podem resultar em valor indeterminados.
 Locks: São necessárias quando o número de regiões críticas diferentes não é
conhecido em tempo de compilação.
 Single: Garante que apenas um thread execute a região de código seguinte. Mas não é
uma região critica em si.

Threads em Java:

 Há duas técnicas para criar threads:


o Criar uma nova classe derivada da classe Thread e a sobreposição de seu
método run.
o Outra técnica alternativa e mais usada é a definição de uma classe que
implementa a interface runnable.
 Chamada do método start faz 2 coisas:
o Aloca memória e inicializa um novo thread na JVM.
o Chama o método run, tornando a thread elegível para execução da JVM.

Threads no Linux:

 CLONE_FS: As informações do sistema de arquivos são compartilhadas.


 CLONE_VM: O espaço de memória e compartilhado.
 CLONE_SIGHAND: Os manipuladores de sinais são compartilhados.
 CLONE_FILES: O conjunto de arquivos abertos e compartilhados.

Modelos de geração de multithreads:

 Modelo muitos-para-um:
o Mapeia muitos threads de usuário para um único thread de kernel.
o Como somente 1 threads pode acessar o kernel se uma bloquear as outras
ficam incapazes de executar
 Modelo um-para-um:

o
o Permite que múltiplos threads sejam executados em paralelo em
multiprocessadores.
o A única desvantagem e que a criação de um thread de usuário requer também
uma criação do thread de kernel com isso pode sobrecarregar o sistema.
 Modelo Muitos-para-muitos:

o
o Múltiplos threads de nível de usuário para um número menor ou igual de
threads de kernel.
Extra:

Pthreads: É o padrão posix que define uma API para a criação e sincronização de threads. E
uma especificação para o comportamento dos threads e não uma implementação.

Paralelismo em nível de dados (Data level parallelism - DLP):

 Surge porque existem muitos itens de dados que podem ser operados ao mesmo
tempo.
 Usadas em arquitetura SIMD (Vetor, matriz)

Paralelismo em nível de tarefas (Task-level Parallelism - TLP):

 Surge por que são criadas tarefas que podem operar de modo independente e
principalmente em paralelo.
 Usada em arquitetura MIMD (Multiprocessamento)

Você também pode gostar