Sobes.tech
Junior — Middle

Kiedy dokładnie nastąpi blokada przy użyciu kanału o rozmiarze 100 elementów?

sobes.tech AI

Odpowiedź od AI

W Go, kanał z rozmiarem bufora 100 elementów oznacza, że można wysłać do 100 wartości bez blokowania nadawcy.

Blokada nastąpi w momencie, gdy bufor kanału będzie już zawierał 100 elementów, a goroutine wysyłająca spróbuje wysłać 101. element. Ponieważ bufor jest pełny, wysłanie zostanie zablokowane, dopóki ktoś nie odczyta co najmniej jednego elementu z kanału.

Przykład:

ch := make(chan int, 100)

// Wypełniamy kanał
for i := 0; i < 100; i++ {
    ch <- i // nie blokuje się
}

// Następne wysłanie zostanie zablokowane, dopóki nie zostanie odczytany element
ch <- 101 // blokuje się

W ten sposób blokada występuje podczas próby wysłania elementu do w pełni zapełnionego bufora kanału.