Sobes.tech
Назад к вопросам
Junior — Middle
75

При каких условиях осуществляется блокировка при работе с стандартным каналом передачи данных?

Компании, где спрашивали
Цифровая Эволюция

Ответ от нейросети

sobes.tech AI

В Go стандартный канал передачи данных блокируется в следующих случаях:

  • При отправке значения в канал (chan <- value), если канал небуферизированный или буфер заполнен, отправляющая горутина блокируется до тех пор, пока другой поток не прочитает значение.
  • При чтении из канала (value := <- chan), если канал пуст, читающая горутина блокируется до появления данных.

Таким образом, блокировка происходит при попытке отправить данные в полный канал или прочитать из пустого канала, обеспечивая синхронизацию между горутинами.

Пример:

ch := make(chan int) // небуферизированный канал

// Отправка блокируется, пока кто-то не прочитает
go func() {
    ch <- 42
}()

val := <-ch // чтение разблокирует отправку
fmt.Println(val)