Sobes.tech
Middle+

Ինչպես են կառուցված գորուտիները և որքան հիշողություն են զբաղեցնում ստեկում?

sobes.tech AI

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

Goroutine-ը՝ դա թեթև քաշով կատարման հոսք է, որը կառավարում է Go-ի (runtime) կատարման միջավայրը։ Դրանք մուլտիպլեքսվում են ավելի փոքր համակարգային հոսքերի (թելերի պուլ) վրա։

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

  • Stack՝ Յուրաքանչյուր goroutine ունի առանձին, ընդլայնվող stack։ Սկզբում փոքր է (16KB Go 1.4+-ով, նախորդում 8KB), կարող է ավելացվել կամ նվազեցվել անհրաժեշտության դեպքում։
  • Go ծրագրավորող՝ Իրականացնում է M:N մոդելը (M goroutines N համակարգային հոսքերի վրա)։ Պատասխանատու է goroutines-ների փոխարկման համար հասանելի համակարգային հոսքերի վրա։ Փոխարկումը տեղի է ունենում բլոկավորող գործողությունների ժամանակ (մտած/արտած, սպասում ալիքի վրա) կամ բացահայտ runtime.Gosched()-ի կանչով։
  • Կոնտեքստ՝ պարունակում է մեքենայական կոդի ցուցիչը, stack-ի ցուցիչը և այլ մետա-տեղեկատվություն, որոնք անհրաժեշտ են ծրագրավորողին։

Go 1.4-ից սկսած, goroutine-ի սկզբնական stack-ի չափը 16KB է։ Այս չափը հաստատուն չէ և կարող է դինամիկ փոփոխվել։