Sobes.tech
Junior — Middle

Pode explicar o princípio de funcionamento do agendador de tarefas na linguagem Go e como ele interage com os threads do sistema?

sobes.tech IA

Resposta da IA

Na linguagem Go, o agendador (scheduler) é responsável por gerir as goroutines, que são threads leves que são executadas dentro de um thread do sistema operativo (thread OS).

Go utiliza um modelo M:N, onde M é o número de threads do sistema e N é o número de goroutines. O agendador distribui as goroutines pelos threads disponíveis, alternando entre eles para uma utilização eficiente da CPU.

Componentes principais do agendador:

  • G (goroutine) — estrutura que representa uma goroutine.
  • M (máquina) — thread do sistema onde as goroutines são executadas.
  • P (processador) — processador lógico que liga G e M, gerindo a execução.

Princípio de funcionamento:

  1. Uma goroutine (G) é atribuída a um P.
  2. P liga-se a M (thread do sistema).
  3. M executa a goroutine.
  4. O agendador alterna a execução entre as goroutines quando uma fica bloqueada (por exemplo, em entrada/saída) ou quando o seu quantum de tempo expira.

Isto permite que o Go utilize eficientemente os recursos do sistema, garantindo alta concorrência sem necessidade de criar múltiplos threads pesados do sistema.

Exemplo de criação de uma goroutine:

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