Sobes.tech
Junior — Middle

Pode explicar como o mecanismo do agendador de tarefas é implementado no sistema?

sobes.tech IA

Resposta da IA

Em Go, o agendador de tarefas (scheduler) está implementado como parte do runtime e é responsável por gerir as goroutines, que são threads leves. Princípios principais:

  • Existem vários threads do sistema (M), nos quais as goroutines (G) são executadas.
  • O agendador liga as goroutines aos threads através de objetos P (processor), que gerenciam as filas de goroutines prontas a serem executadas.
  • As goroutines são colocadas numa fila, e o agendador escolhe a próxima para executar.
  • Se uma goroutine fica bloqueada (por exemplo, em entrada/saída), o agendador muda para outra.

Exemplo de criação e execução de uma goroutine:

package main

import (
    "fmt"
    "time"
)

func task(id int) {
    fmt.Printf("Tarefa %d iniciada\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Tarefa %d finalizada\n", id)
}

func main() {
    for i := 1; i <= 3; i++ {
        go task(i) // inicia uma goroutine
    }
    time.Sleep(2 * time.Second) // espera terminar
}

Desta forma, o agendador do Go distribui eficientemente a execução de múltiplas goroutines num número limitado de threads do sistema, garantindo concorrência e paralelismo.