Sobes.tech
Junior — Middle

Quais as consequências no funcionamento do programa ao definir GOMAXPROCS como 1 e iniciar uma goroutine infinita?

sobes.tech IA

Resposta da IA

Configurar GOMAXPROCS para 1 limita o número de threads do sistema operativo que o agendador do Go pode usar a um thread. Se uma goroutine infinita for iniciada neste cenário:

  • Todos os cálculos serão realizados sequencialmente em um único thread.
  • Se a goroutine infinita não contiver pontos onde ocorre uma troca de contexto (por exemplo, chamadas a operações bloqueantes ou runtime.Gosched()), outras goroutines podem não obter tempo de execução, o que levará ao "congelamento" do programa.
  • Como resultado, o programa pode deixar de responder ou funcionar muito lentamente, pois o agendador não poderá alternar eficientemente entre as goroutines.

Exemplo:

package main

import (
    "runtime"
    "time"
    "fmt"
)

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        for {
            // ciclo infinito sem chamar runtime.Gosched()
        }
    }()

    time.Sleep(time.Second)
    fmt.Println("Programa terminado")
}

Neste exemplo, a goroutine principal pode não obter tempo de execução se a goroutine infinita não ceder o controlo, o que levará ao "congelamento" do programa.