Threads
Agenda
• Modelo de Threads
• Aplicação de Threads
• Threads no Modo Usuário
• Threads no Modo Kernel
• Implementações Híbridas de Threads
• Threads Pop-up
• Threads no Linux
Modelo de Threads
• Processo: recursos + linhas de execução
• Recursos formam um contexto de execução
• Threads são entidades que competem pelo
tempo de CPU
• Threads “vivem” em processos,
compartilhando seus recursos
Modelo de Threads
Modelo de Threads
• Threads em um processo são cooperativas,
compartilham os recursos e trabalham juntas
para realizar alguma tarefa.
Modelo de Threads
Aplicação de Threads
• Por que usar threads?
– Modelo de programação mais apropriado para
tratamento de atividades concorrentes
– Facilidade de criação e finalização (peso leve)
– Permite sobrepor diferentes atividades de E/S,
dando um ganho de desempenho
Aplicação de Threads
• Editor de texto
Aplicação de Threads
• Servidor WEB
Aplicação de Threads
• Formas de construir um Servidor
Implementação de Threads
• Existem três formas de implementar
multithreading
– Modo Usuário
– Modo Kernel
– Modelo Híbrido
Threads no Modo Usuário
• Threads são implementadas como uma
biblioteca
• Kernel desconhece a existência das threads
• O run-time system coordena a execução das
threads, sem chamadas de sistema
• O que acontece quando uma thread faz uma
chamada bloqueante?
Threads no Modo Usuário
Threads no Modo Kernel
• O kernel gerencia a execução das threads
• Custo mais alto para criar e destruir threads
– Reciclagem de Threads
• Sem problemas com chamadas bloqueantes
Threads no Modo Kernel
Modelo Híbrido
Threads Pop-Up
• Thread criada automaticamente para
gerenciar um evento de E/S
Threads no Linux
• Criação de Thread
– A função pthread_create cria uma nova thread.
– O programador deve fornecer
• Um ponteiro para uma variável que armazenará o ID da
Thread
• Um ponteiro para uma estrutura thread attribute
• Um ponteiro para função que a thread irá executar
• Argumentos da função da thread como um ponteiro
void
Passando dados para Threads
Threads no Linux
• Joining Threads
– Em alguns casos, é necessário esperar pela
finalização de uma thread
– A função pthread_join bloqueia uma thread até
que a thread desejada finalize
Exercícios
• Implemente os exemplos de código listados na
apresentação.
• Crie uma aplicação multithread (duas threads)
que seja capaz de calcular o Nth número
primo. Utilize as chamadas de sistemas
apresentadas.
Exercícios
• Neste problema, iremos comparar a performance
de dois servidores de arquivo. O servidor A é
monothread e o servidor B é multithread. Ambos
servidores compartilham as seguintes
características: leva 15 ms para responder uma
requisição se os dados estão na cache. Se um
acesso ao disco é necessário, como em 1/3 das
vezes, 75 ms adicionais são necessários, durante
os quais a thread dorme. Quantas requisições/sec
o servidor pode atender se é monothread? E se
for multithread?
Exercícios
• Em quais circunstâncias um servidor WEB
monothread seria melhor do que um
multithread?
• Pesquise sobre o problema da inversão de
prioridades. Ele pode ocorrer em thread modo
usário? Por que ou por que não?
Referências
• TANENBAUM, Andrew S., Sistemas Operacionais
Modernos, 2° ed., Ed. Pearson Education, 2003.
• MITCHEL, M., OLDHAM J. e SAMUEL A., Advanced
Linux Programming, 1° ed., New Riders Publisher,
2001.