Goroutine x thread do sistema operacional
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).