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.