Junior — Middle
97
Стандартты деректер беру арнасы арқылы жұмыс істеген кезде қандай жағдайларда блоктау жүзеге асырылады?
Сұралған компаниялар
Цифровая Эволюция
AI-дан жауап
sobes.tech AI
В Go стандартный канал передачи данных блокируется в следующих случаях:
- При отправке значения в канал (
chan <- value), если канал небуферизированный или буфер заполнен, отправляющая горутина блокируется до тех пор, пока другой поток не прочитает значение. - При чтении из канала (
value := <- chan), если канал пуст, читающая горутина блокируется до появления данных.
Таким образом, блокировка происходит при попытке отправить данные в полный канал или прочитать из пустого канала, обеспечивая синхронизацию между горутинами.
Пример:
ch := make(chan int) // небуферизированный канал
// Отправка блокируется, пока кто-то не прочитает
go func() {
ch <- 42
}()
val := <-ch // чтение разблокирует отправку
fmt.Println(val)