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.