Sobes.tech
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.