Sobes.tech
Junior — Middle

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

sobes.tech AI

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

Στη γλώσσα Go, ένα κανάλι με περιορισμένη χωρητικότητα (buffered channel) έχει σταθερό μέγεθος buffer. Όταν γράφουμε δεδομένα στο κανάλι με την εντολή chan <- value, συμβαίνει το εξής:

  • Αν υπάρχει ελεύθερος χώρος στον buffer του καναλιού, η τιμή τοποθετείται στον buffer και η λειτουργία εγγραφής ολοκληρώνεται άμεσα.
  • Αν ο buffer είναι γεμάτος, η λειτουργία εγγραφής μπλοκάρει μέχρι κάποιος να διαβάσει μια τιμή από το κανάλι, απελευθερώνοντας χώρο.

Έτσι, ένα buffered channel με περιορισμένη χωρητικότητα παρέχει συγχρονισμό μεταξύ goroutines: η εγγραφή μπλοκάρει σε περίπτωση υπερχείλισης, και η ανάγνωση σε περίπτωση άδειου buffer.

Παράδειγμα:

ch := make(chan int, 2) // buffer για 2 στοιχεία

ch <- 1 // εγγραφή, buffer: [1]
ch <- 2 // εγγραφή, buffer: [1, 2]
// ch <- 3 // μπλοκάρει, επειδή ο buffer είναι γεμάτος

fmt.Println(<-ch) // διαβάζει 1, buffer: [2]
ch <- 3 // τώρα η εγγραφή θα περάσει

Έτσι, ο μηχανισμός εγγραφής σε ένα κανάλι με περιορισμένη πρόσβαση διασφαλίζει τον έλεγχο της ροής δεδομένων και αποτρέπει το υπερχείλιση του buffer.