Sobes.tech
Junior — Middle

Em que casos uma tarefa iniciada numa goroutine pode ser adicionada à fila global do agendador?

sobes.tech IA

Resposta da IA

Em Go, uma tarefa executada numa goroutine pode ser adicionada à fila global do agendador nos seguintes casos:

  • Quando a goroutine é criada com go: Ao chamar go func() { ... }(), uma nova goroutine é criada e colocada na fila global do agendador para execução.

  • Se o thread atual (M) estiver ocupado ou sobrecarregado: O agendador pode mover a goroutine para a fila global para distribuir a carga entre os threads.

  • Quando a goroutine fica bloqueada: Se a goroutine aguarda um recurso (por exemplo, um canal ou temporizador), ela pode ser suspensa e, após desbloqueio, adicionada à fila global.

  • Quando a fila local do agendador está vazia: O agendador pode pegar tarefas da fila global para equilibrar a carga.

Exemplo de criação de goroutine:

func main() {
    go func() {
        fmt.Println("Olá do goroutine")
    }()
    time.Sleep(time.Second) // para que a goroutine tenha tempo de executar
}

Aqui, a goroutine é imediatamente adicionada à fila global do agendador para execução.