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 αγωγού.