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.
CPU (cada core roda uma tarefa por vez)
Run queue (tarefas prontas esperando a CPU)
0Context switches
100%Utilização útil da CPU
0Tarefas
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.
ProcessoThreadGoroutine
Memóriaprópriacompartilhadacompartilhada
Criaçãocaramédiabarata (~2KB)
Trocakernelkerneluser space
Isolamentofortenenhumnenhum

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ória
go work() // 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.