Junior — Middle
Hoe worden de taakwachtrijen binnen het procesplanningssysteem geïmplementeerd?
sobes.tech AI
Antwoord van AI
In systemen voor procesplanning (scheduler) in Go worden taakwachtrijen meestal geïmplementeerd met behulp van datastructuren zoals kanalen (channels) en wachtrijen (queues).
Belangrijkste methoden:
-
Kanalen (channels): Go biedt ingebouwde kanalen die het veilig overdragen van taken tussen goroutines mogelijk maken. Een kanaal kan worden beschouwd als een FIFO-wachtrij.
-
Wachtrijen op slices of lijsten: Soms worden voor complexere logica eigen implementaties van wachtrijen gebaseerd op slices of lijsten gebruikt, met mutexen voor synchronisatie.
Voorbeeld van een eenvoudige taakwachtrij met behulp van een kanaal:
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Taak wordt verwerkt", task)
time.Sleep(time.Second) // simulatie van werk
}
}
func main() {
tasks := make(chan int, 5) // gebufferd kanaal
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Taak toegevoegd", i)
}
close(tasks)
time.Sleep(2 * time.Second)
}
Op deze manier bieden kanalen een veilige en handige taakwachtrij voor de scheduler.