Sobes.tech
Middle+

Como são estruturadas as goroutines e quanto de memória elas ocupam na pilha?

sobes.tech IA

Resposta da IA

Uma goroutine é um thread leve gerido pelo ambiente de execução do Go (runtime). Elas são multiplexadas em um número menor de threads do sistema (pool de threads).

Componentes principais:

  • Pilha: Cada goroutine tem uma pilha separada e expansível. Inicialmente pequena (16KB com Go 1.4+, anteriormente 8KB), ela pode aumentar ou diminuir conforme necessário.
  • Agendador Go: Implementa o modelo M:N (M goroutines em N threads do sistema). Ele gerencia a troca de goroutines entre os threads disponíveis. A troca ocorre em operações bloqueantes (entrada/saída, espera em canal) ou por chamada explícita runtime.Gosched().
  • Contexto: Contém um ponteiro para o código de máquina para execução, um ponteiro para a pilha e outras metadados necessárias ao agendador.

O tamanho inicial da pilha de uma goroutine desde o Go 1.4 é de 16KB. Esse tamanho não é fixo e pode mudar dinamicamente.