O que é uma goroutine? Como ela difere de uma thread do sistema? Fale sobre o agendador Go (GMP).
sobes.tech IA
Resposta da IA
A goroutine é um thread leve de execução na linguagem Go, gerenciado pelo runtime do Go e não pelo sistema operativo. Ao contrário de um thread do sistema, as goroutines têm um tamanho de pilha muito menor (começando com alguns quilobytes e podendo crescer dinamicamente), o que permite executar milhares ou até milhões de goroutines simultaneamente com baixos custos.
Os threads do sistema são criados e agendados pelo sistema operativo, têm uma pilha fixa grande e operações de troca de contexto mais caras.
O agendador do Go baseia-se no modelo GMP:
- G (goroutine) — a própria goroutine, unidade de execução.
- M (máquina) — thread do sistema (thread do SO) onde as goroutines são executadas.
- P (processador) — processador lógico, recurso necessário para executar uma goroutine em M.
P gere a fila de goroutines prontas para execução (G). M pode executar apenas uma goroutine de cada vez, mas graças à presença de múltiplos M e P, o agendador distribui eficientemente as goroutines entre os threads do sistema, garantindo concorrência e paralelismo.
Esta abordagem permite ao Go usar eficientemente os recursos do sistema e escalar em sistemas multiprocessador.