Sobes.tech
Senior

Ի՞նչ է գորուտինան: Ինչպե՞ս է կառուցված։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում goroutine-ը թեթև կատարման հոսք է: Բացառությամբ համակարգային հոսքերի, goroutine-ները կառավարում է Go-ի ռանթայմը և ունեն շատ փոքր ստեկ (սկիզբը մի քանի կիլոբայթ է և կարող է դինամիկորեն մեծանալ): Սա թույլ է տալիս միաժամանակ գործարկել հարյուր հազարավոր goroutine-ներ ցածր ծախսերով:

Goroutine-ի կառուցվածքը:

  • Goroutine-ներ ստեղծելիս (go օպերատորով), Go-ի պլանավորիչը դրանք տեղադրում է պատրաստի գործերի հերթում:
  • Go ռանթայմը օգտագործում է M:N պլանավորում՝ M համակարգային հոսքեր (OS threads) սպասարկում են N goroutine-ներ:
  • Goroutine-ները փոխում են կոնտեքստը ռանթայմ մակարդակում, ինչը ավելի արագ է, քան համակարգային հոսքերի փոխումը:
  • Ամեն մի հոսք (M) կարող է կատարել մի քանի goroutine-ներ (N), փոխելով ביניהם բլոկավորումների կամ անհրաժեշտության դեպքում:

Goroutine ստեղծելու օրինակ:

func sayHello() {
    fmt.Println("Բարեւ goroutine-ից")
}

func main() {
    go sayHello() // գործարկում ենք goroutine
    time.Sleep(time.Second) // սպասում ենք, որպեսզի goroutine-ն հասցնի ավարտել
}