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