A programação paralela e distribuída é feita principalmente por dois conceitos básicos: processos e threads. Sabe-se que processos são mais pesados que threads. Por que isso acontece?
Questão
A programação paralela e distribuída é feita principalmente por dois conceitos básicos: processos e threads.
Sabe-se que processos são mais pesados que threads. Por que isso acontece?
Alternativas
a) Processos realizam um número maior de comunicações.
b) Threads se comunicam por memória compartilhada, que é rápida.
c) Processos se comunicam apenas por mensagens, portanto são mais lentos.
d) Threads alocam menos memória do que processos.
e) Threads vivem dentro de um processo já existente e têm acesso à sua memória
Explicação
Ideia central: um processo é uma unidade de execução com espaço de endereçamento próprio e diversos recursos associados (tabelas de páginas, descritores/handles, contexto de segurança, etc.). Já uma thread é uma unidade de execução dentro de um processo, compartilhando praticamente todos esses recursos (principalmente memória), tendo “próprio” basicamente contador de programa, registradores e pilha (stack).
Por que processos são mais “pesados” que threads?
- Isolamento de memória: cada processo tende a ter seu próprio espaço de memória virtual. Criar/trocar de processo envolve lidar com estruturas do SO relacionadas a esse isolamento (ex.: mapeamentos de memória, tabelas de páginas), o que aumenta o custo.
- Mais recursos por unidade: processos carregam mais “estado” e recursos gerenciados pelo sistema operacional do que uma thread.
- Troca de contexto (context switch) mais cara: alternar entre processos geralmente exige trocar o contexto incluindo o espaço de endereçamento (ou estruturas equivalentes), enquanto alternar entre threads do mesmo processo reaproveita o mesmo espaço de memória e boa parte dos recursos.
A alternativa que melhor expressa esse motivo fundamental é a que destaca que threads existem dentro de um processo e acessam a memória dele, logo demandam menos estruturas e menos custo de gerenciamento pelo SO.
Alternativa correta: (e).