Sobes.tech
Senior

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.