Junior — Middle
Дар кадом шароитҳо блоккарат дар вақти кор бо канали стандартии интиқоли маълумот сурат мегирад?
sobes.tech AI
Ҷавоб аз AI
Στη Go, το τυπικό κανάλι μετάδοσης δεδομένων μπλοκάρει στις ακόλουθες περιπτώσεις:
- Όταν στέλνετε μια τιμή στο κανάλι (
chan <- value), εάν το κανάλι δεν έχει buffer ή ο buffer είναι γεμάτος, η goroutine αποστολής μπλοκάρει μέχρι να διαβάσει κάποιος άλλος το μήνυμα. - Όταν διαβάζετε από το κανάλι (
value := <- chan), εάν το κανάλι είναι άδειο, η goroutine ανάγνωσης μπλοκάρει μέχρι να υπάρχουν δεδομένα.
Έτσι, το μπλοκάρισμα συμβαίνει όταν προσπαθείτε να στείλετε δεδομένα σε γεμάτο κανάλι ή να διαβάσετε από άδειο κανάλι, διασφαλίζοντας συγχρονισμό μεταξύ των goroutines.
Παράδειγμα:
ch := make(chan int) // κανάλι χωρίς buffer
// Η αποστολή μπλοκάρει μέχρι κάποιος να διαβάσει
go func() {
ch <- 42
}()
τιμή := <-ch // η ανάγνωση ξεμπλοκάρει την αποστολή
fmt.Println(τιμή)