Junior — Middle
Μπορούν να λαμβάνονται τιμές από ένα κανάλι σε πολλαπρα goroutines ταυτόχρονα;
sobes.tech AI
Απάντηση από AI
Ναι, αρκετές goroutines μπορούν ταυτόχρονα να λαμβάνουν τιμές από ένα κανάλι σε Go. Τα κανάλια σε Go υποστηρίζουν πολλαπλή ανάγνωση και εγγραφή, επιτρέποντας σε πολλές goroutines να διαβάζουν από το ίδιο κανάλι παράλληλα.
Ωστόσο, είναι σημαντικό να σημειωθεί ότι αν πολλές goroutines διαβάζουν από το ίδιο κανάλι, κάθε τιμή θα λαμβάνεται μόνο από μία από αυτές — οι τιμές δεν διπλασιάζονται. Αυτό είναι χρήσιμο για την κατανομή εργασίας μεταξύ των goroutines (pool εργαζομένων).
Παράδειγμα:
ch := make(chan int)
// Ξεκινάμε πολλές goroutines που διαβάζουν από το κανάλι
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d έλαβε %d\n", id, val)
}
}(i)
}
// Στέλνουμε δεδομένα στο κανάλι
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
Σε αυτό το παράδειγμα, οι τιμές από το κανάλι διανέμονται μεταξύ των τριών goroutines.