devterview_$ iniciar simulação

Goroutine x thread do sistema operacional

MédioPlenoConcorrência

Pergunta

O que é uma goroutine e como ela difere de uma thread do sistema operacional?

Resposta esperada

Uma goroutine é uma unidade de execução leve gerenciada pelo runtime do Go, não pelo SO. Começa com uma pilha pequena (alguns KB) que cresce sob demanda, contra ~1–8 MB fixos de uma thread do SO. O scheduler do Go multiplexa muitas goroutines (M) sobre poucas threads do SO (N) — o modelo M:N — e faz a troca em pontos de yield (chamada de canal, syscall, alocação) sem custo de context switch do kernel. Resultado: dá pra ter centenas de milhares de goroutines num processo, o que seria inviável com threads do SO. O custo é que uma goroutine que faz um loop tight sem yield pode monopolizar sua thread (mitigado por preempção assíncrona nas versões recentes).

Por que perguntam isso

Pergunta pleno de Go. Sinal de domínio: citar o modelo M:N, a pilha que cresce, e a ordem de grandeza (centenas de milhares de goroutines).

#goroutines#scheduler#concorrencia
publicidade

Perguntas de acompanhamento

Relacionadas