Sobes.tech
Junior — Middle

Em que casos as tarefas em goroutines são colocadas na fila comum do agendador de execução?

sobes.tech IA

Resposta da IA

Em Go, as tarefas (goroutines) são colocadas na fila de planeamento de execução (fila de execução) nos seguintes casos:

  • Quando uma goroutine é criada com go e está pronta para execução, ela é colocada na fila do planeador.
  • Se a goroutine fica bloqueada (por exemplo, em operações de entrada/saída, canais ou sincronização) e depois é desbloqueada, ela retorna à fila.
  • Ao terminar a goroutine atual, o planeador escolhe a próxima da fila.

O planeador de Go usa um modelo M:N, onde M são os threads do sistema e N são as goroutines. Existem muitas goroutines, que são distribuídas pelos threads através de filas. A fila do planeador é uma estrutura onde as goroutines prontas para execução são armazenadas.

Exemplo:

func main() {
    go func() {
        fmt.Println("Goroutine iniciada")
    }()
    time.Sleep(time.Second) // Esperamos para que a goroutine tenha tempo de executar
}

Aqui, a goroutine, após ser criada, é colocada na fila do planeador para execução.