Sobes.tech
Junior — Middle

Πώς διασφαλίζεται η εργασία και ο συγχρονισμός των νημάτων εκτέλεσης στο Golang;

sobes.tech AI

Απάντηση από AI

Στη Go, για εργασία με νημάτια εκτέλεσης, χρησιμοποιούνται οι goroutines, που είναι ελαφριά νήματα που διαχειρίζεται το runtime της Go. Οι goroutines ξεκινούν με τη λέξη-κλειδί go πριν από την κλήση μιας συνάρτησης, επιτρέποντάς της να εκτελείται ασύγχρονα.

Για συγχρονισμό των goroutines, χρησιμοποιούνται κανάλια (channels) και primitives από το πακέτο sync (π.χ., Mutex, WaitGroup). Τα κανάλια παρέχουν ασφαλή ανταλλαγή δεδομένων μεταξύ των goroutines και επιτρέπουν τον συγχρονισμό τους.

Παράδειγμα χρήσης goroutines και καναλιών:

package main

import (
    "fmt"
    "time"
)

func worker(ch chan string) {
    time.Sleep(time.Second)
    ch <- "έτοιμο"
}

func main() {
    ch := make(chan string)
    go worker(ch)
    msg := <-ch
    fmt.Println("Εργασία goroutine:", msg)
}

Εδώ, η κύρια goroutine ξεκινά το worker σε μια ξεχωριστή goroutine, η οποία μετά από καθυστέρηση στέλνει ένα μήνυμα μέσω του καναλιού. Η κύρια goroutine περιμένει να λάβει το μήνυμα από το κανάλι, διασφαλίζοντας τον συγχρονισμό.