Junior — Middle
Mikor történik pontosan a blokkolás, ha egy 100 elemű csatornát használunk?
sobes.tech MI
Válasz az MI-től
A Go-ban a 100 elemű pufferrel rendelkező csatorna azt jelenti, hogy a küldő anélkül küldhet el akár 100 értéket, hogy blokkolná magát.
A blokkolás akkor történik, amikor a csatorna pufferében már 100 elem van, és a küldő goroutine megpróbálja elküldeni az 101. elemet. Mivel a puffer tele van, a küldés blokkolódik, amíg valaki nem olvas ki legalább egy elemet a csatornából.
Példa:
ch := make(chan int, 100)
// Töltjük a csatornát
for i := 0; i < 100; i++ {
ch <- i // nem blokkolódik
}
// A következő küldés blokkolódik, amíg ki nem olvasnak egy elemet
ch <- 101 // blokkolódik
Így a blokkolás akkor következik be, amikor egy elemet próbálunk küldeni egy teljesen megtelt csatorna pufferbe.