O que você vai aprender
Definir thread e distingui-la de processo.
Comparar threads de usuário e de núcleo e os modelos de mapeamento.
Diferenciar concorrência de paralelismo.
Reconhecer vantagens, riscos e usos das threads.
Por que dividir um processo em threads?
Um navegador precisa renderizar a página, baixar imagens e responder ao seu clique ao mesmo tempo. Criar um processo separado para cada tarefa seria caro. A solução são as threads: vários fluxos de execução dentro de um mesmo processo.
Threads são mais leves que processos, compartilham dados facilmente e aproveitam máquinas com vários núcleos. Mas esse compartilhamento traz riscos que prepararão o terreno para a sincronização (Aula 7).
O que veremos nesta aula
vs processo→O que se
compartilha→Usuário ×
núcleo→Concorrência ×
paralelismo
O que é uma thread
O que é compartilhado e o que é privado
| Compartilhado entre threads | Privado de cada thread |
|---|---|
| Código, dados globais e heap | Pilha de execução |
| Arquivos abertos | Registradores e contador de programa |
| Espaço de endereçamento | Estado/contexto da thread |
É justamente o compartilhamento do heap e dos dados globais que torna a comunicação entre threads fácil — e que exige cuidado com sincronização.
Threads num servidor web
Stepper: criar processo × criar thread
Threads de usuário e de núcleo
Thread de núcleo. Gerenciada pelo SO, que pode escaloná-la em vários núcleos.
Modelos de multithreading
Os modelos mapeiam threads de usuário em threads de núcleo:
| Modelo | Mapeamento | Característica |
|---|---|---|
| Muitos-para-um | Várias de usuário → 1 de núcleo | Rápido, mas sem paralelismo real; um bloqueio trava todas |
| Um-para-um | Cada de usuário → 1 de núcleo | Paralelismo real; mais custo por thread |
| Muitos-para-muitos | Várias de usuário → várias de núcleo | Flexível; equilibra custo e paralelismo |
Cozinha com vários cozinheiros
Concorrência × paralelismo
Paralelismo. Várias tarefas executando simultaneamente em núcleos diferentes.
| Concorrência | Paralelismo | |
|---|---|---|
| Núcleos necessários | Um já basta | Vários |
| Execução | Alternada (intercalada) | Realmente simultânea |
Da tarefa única às threads
1 fluxo→1 processo,
N threads→Threads em
N núcleos→Paralelismo
real
O salto para o paralelismo real só acontece quando há threads de núcleo e múltiplos núcleos disponíveis.
Vantagens e riscos
Verifique: concorrência vs paralelismo
Em uma CPU de um único núcleo rodando 3 threads, temos:
Threads no editor de texto
Um editor moderno usa threads para tarefas paralelas:
- Uma thread responde ao que você digita (UI sempre fluida).
- Outra faz a verificação ortográfica em segundo plano.
- Outra salva automaticamente (autosave) sem travar a digitação.
Todas compartilham o documento aberto (dados globais), mas cada uma tem seu fluxo próprio.
Confusões frequentes
• Threads não têm pilha compartilhada — a pilha é privada de cada uma.
• Concorrência não implica paralelismo: pode haver concorrência com um núcleo só.
• Threads de usuário puras não dão paralelismo real se mapeiam em uma única thread de núcleo.
Quando usar threads
• Use threads quando as tarefas compartilham muitos dados; use processos quando precisar de forte isolamento.
• Tarefas limitadas por E/S se beneficiam de concorrência mesmo com um núcleo.
• Tarefas limitadas por CPU se beneficiam de paralelismo (vários núcleos).
Revele: bloqueio em threads de usuário
Por que, em threads de usuário puras, uma chamada bloqueante de E/S pode travar todas as threads do processo?
Revisão relâmpago
Para onde isto leva
- Quem escalona as threads de núcleo → Aula 5.
- Corridas no acesso a dados compartilhados → Aula 7 (sincronização).
- Threads que cooperam por dados → Aula 6 (memória compartilhada).
- Base de processos → Aula 3.
Fechando a aula
Atividade em grupo · Threads no editor de texto
Em duplas, identifiquem oportunidades de threads em um aplicativo real.
Roteiro
- Tomem um editor de texto ou navegador.
- Listem 3 tarefas que poderiam rodar em threads separadas (ex.: verificação ortográfica, autosave, renderização).
- Indiquem o que essas threads compartilhariam e o que seria privado.
- Discutam se ganhariam com paralelismo real em uma máquina multicore.
Mini-quiz · Aula 4
20 questões sobre esta aula. Escolha e veja a explicação na hora.
📌 Resumo — leve isto para a prova
- Thread é a unidade de execução; threads compartilham código/dados/heap, mas têm pilha própria.
- Criar threads é mais barato que criar processos e facilita compartilhar dados.
- Threads de usuário são leves; threads de núcleo podem usar vários núcleos.
- Modelos: muitos-para-um, um-para-um e muitos-para-muitos.
- Concorrência é progresso intercalado; paralelismo é execução simultânea real (exige múltiplos núcleos).