Comment les files d'attente de tâches sont-elles implémentées dans le système de planification des processus?
sobes.tech IA
Réponse de l'IA
Dans les systèmes de planification de processus (scheduler) en Go, les files d’attente de tâches sont généralement implémentées à l’aide de structures de données telles que les canaux (channels) et les files (queues).
Principales méthodes :
-
Canaux (channels) : Go fournit des canaux intégrés qui permettent de transférer en toute sécurité des tâches entre goroutines. Un canal peut être considéré comme une file FIFO.
-
Files sur slices ou listes : Parfois, pour une logique plus complexe, on utilise des implémentations propres de files basées sur des slices ou des listes avec des verrouillages (mutex) pour la synchronisation.
Exemple d’une file simple de tâches utilisant un canal :
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Traitement de la tâche", task)
time.Sleep(time.Second) // simulation du travail
}
}
func main() {
tasks := make(chan int, 5) // canal tamponné
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Tâche ajoutée", i)
}
close(tasks)
time.Sleep(2 * time.Second)
}
Ainsi, les canaux assurent une file de tâches sûre et pratique pour le planificateur.