Sobes.tech
Middle+

Горутини кандай түзүлүп, стекте канча жаддыкты ээлейт?

sobes.tech AI

AIден жооп

Goroutine — бул жеңил аткаруу агымы, аны ишке ашыруу чөйрөсү (runtime) башкарган. Алар системалык агымдардын (жиптердин пулу) аз санында мультиплексирленет.

Негизги компоненттери:

  • Stack: Ар бир goroutine өзүнчө, кеңейүүчү стекке ээ. Баштапкыда кичинекей (16KB менен Go 1.4+, мурда 8KB), керектөө боюнча көбөйтүлүп же кыскартылат.
  • Go планировщиги: M:N моделин ишке ашырат (M goroutine N системалык жиптеринде). Ал жеткиликтүү системалык жиптерде goroutine-дердин алмашуусун камсыз кылат. Ал алмашуу блоктоочу операциялар (кірүү/чыгуу, каналдарда күтүү) же ачык runtime.Gosched() чакыруусу аркылуу болот.
  • Контекст: Ишке ашыруу үчүн машиналык кодго көрсөткүч, стекке көрсөткүч жана планировщик үчүн башка мета-маалыматтарды камтыйт.

Go 1.4төн бери, goroutine үчүн баштапкы стек өлчөмү 16KB. Бул өлчөм статикалык эмес жана динамикалык өзгөрүшү мүмкүн.