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.