Sobes.tech
Junior — Middle

Тавзеҳ диҳед, ки чӣ гуна зангҳои бандкунанда дар контексти кор бо goroutine ва чӣ гуна онҳо ба иҷрои барнома таъсир мерасонанд

sobes.tech AI

Ҷавоб аз AI

Гаронии боғланишлари — бу амаллар, уларни амалга оширишда ҳозирги горутина тўхтаб қолади (блокланади) бу амал тугашигача. Goдаги горутина контекстида, агар горутина блокланишга олиб келадиган чақирувни амалга оширса, у чақирув тугаши билан давом этмайди.

Бу дастурга таъсир қилади, агар блокланишга олиб келадиган чақирув асосий горутинада амалга оширилса, у кутмоқда қолади, бу эса кечиктиришларга ёки тўхтаб қолишларга олиб келиши мумкин. Аммо, горутиналар енгил ва кўплаб бошланиши мумкинлиги учун, бир горутинадаги блокланишга олиб келадиган чақирувлар бошқа горутиналарнинг ишини тўхтатмайди.

Блокланишга олиб келадиган чақирувнинг misoli — каналдан маълумотлар бўлмаса ўқиш:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // қиймат юбориш
    }()
    val := <-ch // блокланишга олиб келадиган чақирув, қийматни кутади
    fmt.Println(val)
}

Бу ерда, каналдан ўқиш амалиёти main горутинасига, қиймат келгунча блоклайди.