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

Έτσι, τα κανάλια παρέχουν μια ασφαλή και βολική ουρά εργασιών για τον προγραμματιστή.