Sobes.tech
Junior — Middle

Como é que o balanceamento da execução das goroutines é realizado num programa?

sobes.tech IA

Resposta da IA

O balanceamento da execução de goroutines em Go é realizado pelo escalonador (scheduler) embutido no runtime. O escalonador distribui as goroutines pelos threads do sistema disponíveis (threads de OS), usando um modelo M:N, onde M é o número de threads e N o número de goroutines.

Pontos principais:

  • Existem muitas goroutines, elas são leves e trocam de contexto sem a participação do sistema operacional.
  • O escalonador usa algoritmos semelhantes à multitarefa cooperativa, mas com capacidade de interrupção.
  • As goroutines são atribuídas a threads, e se uma goroutine fica bloqueada (por exemplo, em entrada/saída), o escalonador troca para outra.

Exemplo:

func main() {
    for i := 0; i < 10; i++ {
        go func(id int) {
            fmt.Println("Goroutine", id)
        }(i)
    }
    time.Sleep(time.Second) // Espera as goroutines terminarem
}

Aqui, o escalonador distribuirá 10 goroutines entre os threads disponíveis, garantindo balanceamento e uso eficiente da CPU.