Sobes.tech
Junior — Middle

Como é que a distribuição de goroutines pelos threads de execução é realizada?

sobes.tech IA

Resposta da IA

Em Go, a distribuição de goroutines pelos threads de execução (threads OS) ocorre através de um agendador incorporado no runtime. Uma goroutine é uma coroutine leve que não corresponde diretamente a um thread do sistema operativo.

O agendador de Go usa um modelo M:N, onde M é o número de threads do sistema operativo e N é o número de goroutines. Ele associa dinamicamente as goroutines aos threads para usar eficientemente os recursos do sistema.

Componentes principais:

  • G (goroutine) — a própria goroutine.
  • M (máquina) — thread do sistema operativo.
  • P (processador) — processador lógico que gere a execução das goroutines.

Processo:

  1. Um P é atribuído a uma goroutine.
  2. O P liga-se a um M (thread do sistema operativo).
  3. O M executa a goroutine.

Se a goroutine ficar bloqueada (por exemplo, numa chamada ao sistema), o agendador pode mudar a execução para outra goroutine noutro thread para evitar inatividade.

Desta forma, a distribuição de goroutines pelos threads ocorre automaticamente e de forma transparente para o desenvolvedor, garantindo alta concorrência e escalabilidade.

Exemplo de criação de uma goroutine:

 go func() {
    fmt.Println("Olá de uma goroutine")
}()

Aqui, o agendador decidirá em qual thread do sistema operativo executar esta goroutine.