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.