Sobes.tech
Junior — Middle

W jakich warunkach następuje blokada podczas pracy z standardowym kanałem transmisji danych?

sobes.tech AI

Odpowiedź od AI

W Go standardowy kanał przesyłania danych blokuje się w następujących przypadkach:

  • Przy wysyłaniu wartości do kanału (chan <- value), jeśli kanał nie ma bufora lub bufor jest pełny, gorutyna wysyłająca blokuje się do momentu, aż inny wątek odczyta wartość.
  • Przy odczycie z kanału (value := <- chan), jeśli kanał jest pusty, gorutyna odczytująca blokuje się do momentu pojawienia się danych.

W ten sposób blokada występuje podczas próby wysłania danych do pełnego kanału lub odczytu z pustego kanału, zapewniając synchronizację między gorutynami.

Przykład:

ch := make(chan int) // kanał bez bufora

// Wysyłanie blokuje się, dopóki ktoś nie odczyta
go func() {
    ch <- 42
}()

wartość := <-ch // odczyt odblokowuje wysyłanie
fmt.Println(wartość)