Sobes.tech
Junior — Middle

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

sobes.tech AI

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

Στο Go, ένας αγωγός με μέγεθος buffer 100 στοιχείων σημαίνει ότι μπορείτε να στείλετε έως και 100 τιμές χωρίς να μπλοκάρει ο αποστολέας.

Το μπλοκάρισμα θα συμβεί τη στιγμή που ο buffer του αγωγού ήδη περιέχει 100 στοιχεία και η goroutine που στέλνει προσπαθεί να στείλει το 101ο στοιχείο. Επειδή ο buffer είναι γεμάτος, η αποστολή θα μπλοκαριστεί μέχρι κάποιος να διαβάσει τουλάχιστον ένα στοιχείο από τον αγωγό.

Παράδειγμα:

ch := make(chan int, 100)

// Γεμίζουμε τον αγωγό
for i := 0; i < 100; i++ {
    ch <- i // δεν μπλοκάρει
}

// Η επόμενη αποστολή θα μπλοκάρει μέχρι να διαβαστεί ένα στοιχείο
ch <- 101 // μπλοκάρει

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