Junior — Middle
Πώς υλοποιούνται οι ουρές εργασιών μέσα στο σύστημα προγραμματισμού διαδικασιών;
sobes.tech AI
Απάντηση από AI
Συστήματα προγραμματισμού διαδικασιών (scheduler) σε Go, οι ουρές εργασιών υλοποιούνται συνήθως με δομές δεδομένων όπως κανάλια (channels) και ουρές (queues).
Κύριοι τρόποι:
-
Κανάλια (channels): Το Go παρέχει ενσωματωμένα κανάλια που επιτρέπουν ασφαλή μεταφορά εργασιών μεταξύ goroutines. Ένα κανάλι μπορεί να θεωρηθεί ως FIFO ουρά.
-
Ουρές σε slices ή λίστες: Μερικές φορές, για πιο πολύπλοκη λογική, χρησιμοποιούνται δικές τους υλοποιήσεις ουρών βασισμένες σε slices ή λίστες με mutex για συγχρονισμό.
Παράδειγμα απλής ουράς εργασιών με χρήση καναλιού:
package main
import (
"fmt"
"time"
)
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Επεξεργασία εργασίας", task)
time.Sleep(time.Second) // προσομοίωση εργασίας
}
}
func main() {
tasks := make(chan int, 5) // buffer καναλιού
go worker(tasks)
for i := 1; i <= 10; i++ {
tasks <- i
fmt.Println("Προστέθηκε εργασία", i)
}
close(tasks)
time.Sleep(2 * time.Second)
}
Έτσι, τα κανάλια παρέχουν μια ασφαλή και βολική ουρά εργασιών για τον προγραμματιστή.