Sobes.tech
Junior — Middle

Ի՞նչ դեպքերում գորուտիններում գտնվող առաջադրանքները տեղադրվում են կատարողական պլանավորողի ընդհանուր հերթում:

sobes.tech AI

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

Go-ում առաջադրանքները (goroutine-ները) տեղադրվում են ընդհանուր կատարման պլանավորողի հերթում (run queue) հետևյալ դեպքերում՝

  • Երբ goroutine-ը ստեղծվում է go օգտագործելով և պատրաստ է կատարման, այն տեղադրվում է պլանավորողի հերթում:
  • Եթե goroutine-ը բլոկավորվում է (օրինակ, մուտք-արտահոսքի գործողությունների, ալիքների կամ սինխրոնիզացիայի ժամանակ) և հետո բացվում է, այն վերադառնում է հերթին:
  • Երբ ընթացիկ goroutine-ը ավարտվում է, պլանավորողը ընտրում է հաջորդը հերթից:

Go պլանավորողը օգտագործում է M:N մոդելը, որտեղ M — համակարգի թելեր, N — goroutine-ներ: Կան շատ goroutine-ներ, որոնք բաշխվում են թելերի վրա հերթերի միջոցով: Պլանավորողի հերթը կառուցվածք է, որտեղ պահվում են պատրաստի կատարման goroutine-ները:

Օրինակ՝

func main() {
    go func() {
        fmt.Println("Goroutine մեկնարկեց")
    }()
    time.Sleep(time.Second) // Կանխատեսում ենք, որ goroutine-ը կատարվի
}

Այստեղ, ստեղծումից հետո, goroutine-ը տեղադրվում է պլանավորողի հերթում կատարման համար։