Sobes.tech
Junior — Middle

Горутина менен иштөө контекстинде блоктогон чакыруулар эмне экенин жана алар программаны ишке ашырууга кандай таасир этээрин түшүндүрүңүз

sobes.tech AI

AIден жооп

Блоктоо чакыруулар — бул ишке ашырылганда учурдагы горутина токтоп калуучу (блоктолучу) операциялар. Goдагы горутиналар контекстинде, эгер горутина блоктоо чакырууну аткарса, ал чакыру аяктагандан кийин гана уланат.

Бул программага таасир этет; эгер блоктоо чакыруусу негизги горутинада болсо, ал күтөт, бул кечиктирүүлөргө же кармалып калууга алып келиши мүмкүн. Бирок, горутиналар жеңил жана көптөгөн башталышы мүмкүн болгондуктан, бир горутинадагы блоктоо чакыруулары башка горутиналардын ишине тоскоолдук кылбайт.

Блоктоо чакыруунун мисалы — каналдан маалыматтар жок болсо окуу:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // маанини жөнөтүү
    }()
    val := <-ch // блоктоо чакыруусу, маанини күтүп турат
    fmt.Println(val)
}

Бул жерде, каналдан окуу операциясы main горутинаны блоктоп, мааниге жеткенге чейин күтөт.