Sobes.tech
Junior — Middle

Ինչպե՞ս է կատարվում goroutine-ների բաշխումը կատարողական թելերի վրա:

sobes.tech AI

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

Go-ում, goroutine-ների բաշխումը կատարում է գործարկման թելերի (OS threads) միջև՝ ներքին ծրագրային պլանավորողի միջոցով։ Goroutine-ը՝ դա թեթև կորթինա է, որը ուղղակիորեն չի համապատասխանում մեկ OS թելին։

Go-ի պլանավորիչը օգտագործում է M:N մոդելը, որտեղ M-ն է OS թելերի քանակը, իսկ N-ն՝ goroutine-ների քանակը։ Այն դինամիկ կերպով վերապահում է goroutine-ներին թելերին՝ արդյունավետ օգտագործելու համար համակարգի ռեսուրսները։

Հիմնական բաղադրիչները՝

  • G (goroutine) — ինքն goroutine-ն է։
  • M (մեքենա) — OS թելը։
  • P (պրոցեսոր) — տրամաբանական պրոցեսոր, որը կառավարում է goroutine-ների կատարմանը։

Պրոցեսը՝

  1. P-ն վերապահվում է goroutine-ին։
  2. P-ն կապվում է M-ի հետ (OS թել)։
  3. M-ն իրականացնում է goroutine-ը։

Եթե goroutine-ն բլոկավորվի (օրինակ՝ համակարգային կանչի ժամանակ), պլանավորիչը կարող է փոխել կատարմանը այլ goroutine-ի վրա այլ թելում՝ կանխելու անգործությունը։

Այսպիսով, goroutine-ների բաշխումը թելերի միջև կատարվում է ավտոմատ և թափանցիկ՝ ծրագրավորողի համար, ապահովելով բարձր մրցակցություն և ընդլայնելիություն։

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

 go func() {
    fmt.Println("Բարև goroutine-ից")
}()

Այստեղ պլանավորիչը ինքն է որոշում, որ թելում է այս goroutine-ը գործարկելու։