Sobes.tech
Junior — Middle

Como é que a distribuição de quatro goroutines pelos quatro núcleos do processador ocorre na sua inicialização?

sobes.tech IA

Resposta da IA

No Go, o agendador de goroutines (Goroutine scheduler) distribui as goroutines entre os threads do sistema (M), que por sua vez estão ligados aos núcleos do processador.

Se você tem 4 goroutines e 4 núcleos de processador, ao iniciar o agendador, ele pode distribuir cada goroutine em um núcleo diferente, garantindo execução paralela. Isso é possível se a variável de ambiente GOMAXPROCS estiver configurada para 4 (por padrão, nas versões modernas do Go, ela é igual ao número de núcleos disponíveis).

Exemplo:

runtime.GOMAXPROCS(4) // define o número de threads disponíveis para 4

for i := 0; i < 4; i++ {
    go func(id int) {
        fmt.Printf("Goroutine %d iniciada\n", id)
        // trabalho
    }(i)
}

O agendador do Go distribuirá as goroutines entre os threads, que podem ser executados em diferentes núcleos, permitindo uso eficiente de sistemas multiprocessados. No entanto, a distribuição exata depende da carga do sistema e do agendador interno.