Junior — Middle
Jak działa mechanizm nagrywania w kanale z ograniczonym dostępem i co się wtedy dzieje?
sobes.tech AI
Odpowiedź od AI
W języku Go kanał o ograniczonej pojemności (kanał buforowany) ma stały rozmiar bufora. Gdy zapisujemy dane do kanału za pomocą operacji chan <- value, dzieje się następująco:
- Jeśli w buforze kanału jest wolne miejsce, wartość jest umieszczana w buforze, a operacja zapisu kończy się natychmiast.
- Jeśli bufor jest pełny, operacja zapisu blokuje się, dopóki ktoś nie odczyta wartości z kanału, zwalniając miejsce.
W ten sposób kanał z ograniczonym buforem zapewnia synchronizację między gorutynami: zapis blokuje się przy przepełnieniu, a odczyt przy pustym buforze.
Przykład:
ch := make(chan int, 2) // bufor na 2 elementy
ch <- 1 // zapisuje, bufor: [1]
ch <- 2 // zapisuje, bufor: [1, 2]
// ch <- 3 // blokuje się, ponieważ bufor jest pełny
fmt.Println(<-ch) // odczytuje 1, bufor: [2]
ch <- 3 // teraz zapis się powiedzie
W ten sposób mechanizm zapisu do kanału z ograniczonym dostępem zapewnia kontrolę nad przepływem danych i zapobiega przepełnieniu bufora.