Sobes.tech
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.