Camada Zero · 15 · Processos, Threads & Context Switch
Sua CPU tem poucos cores, mas roda centenas de tarefas. O truque é o time-slicing: cada tarefa roda um pedacinho, o timer interrompe, e o SO troca de contexto. Spawne tarefas, mexa no time slice e olhe a utilização cair quando as trocas dominam.
P = processo (memória isolada)T = thread (memória compartilhada)⟳ troca de contexto
Diminua o time slice e veja a utilização útil cair: cada troca custa tempo (salvar e restaurar estado, cache esfriando), então fatias pequenas gastam mais tempo trocando do que trabalhando. Com tarefas demais para poucos cores, a fila enche e ninguém anda mais rápido.
Processo
Thread
Goroutine
Memória
própria
compartilhada
compartilhada
Criação
cara
média
barata (~2KB)
Troca
kernel
kernel
user space
Isolamento
forte
nenhum
nenhum
Processo vs goroutine em Go
// Processo: novo espaço de endereços, isolado pelo SO
cmd := exec.Command("worker")
cmd.Start() // o SO cria um processo separado// Goroutine: dentro do MESMO processo, compartilha memóriagowork() // o runtime do Go agenda em user space,// troca barata, sem trap pro kernel// O SO escalona threads do kernel com time-slicing e// preempção por timer. GOMAXPROCS define o paralelismo.
n := runtime.GOMAXPROCS(0)
🧠 Desafio — Processos, Threads & Context Switch
Mexe no visualizador antes de responder. As duas últimas são de reflexão: escreve a sua e só então revela o modelo.