Sobes.tech
Middle+

Go тилинде goroutine башкаруу үлгүсү (GMP) жөнүндө айтып бер.

sobes.tech AI

AIден жооп

Go планировщусу GMP моделин колдонуп, горутиндерди, иштөө тутумунун жиптерин жана логикалык процессорлорду башкарат:

  • G (Goroutine): Жеңил, көз карандысыз ишке ашыруу бирдиги. Стек, көрсөтүүчү жана башка абал тууралуу маалыматтарды камтыйт. Бир нече горутиндер бир операциялык тутум жипинде иштей алат.
  • M (Machine): Операциялык тутум жипи. Горутиндин кодун ишке киргизүүчү катары кызмат кылат. M топтому планировщикке жеткиликтүү болушу мүмкүн.
  • P (Processor): Логикалык процессор. Горутиндин ишке ашышы үчүн контекст берет. Бул Mде ишке ашырууга даяр горутиндердин жергиликтүү кезеги бар. Туташ P саны боюнча runtime.NumCPU() барабар.

Өз ара аракеттенүү:

  1. G (горутинаны) түзүп, аны глобалдык же жергиликтүү P кезегине салат.
  2. Бос M P сурайт. Эгер P жеткиликтүү болсо, M ага кошулат.
  3. M Pден бир горутинаны алып, анын ишке ашуусун баштайт.
  4. Эгер горутин блоктолсо (мисалы, I/O күтүп жатса), M Pден ажырайт ("hand off"). P башка M үчүн жеткиликтүү калат же өз кезегиндеги башка горутинаны пландаштырат.
  5. Блоктолгон горутинаны кайра улантуу үчүн даяр болгондо, ал кайра P кезегине же глобалдык кезекке салынат.
  6. Планировщик керек болсо, M түзүлүшү мүмкүн (мисалы, бардык бар Mлер блоктолсо), же иштебей калганда алынып салынат.

Прецессия (мыйзамсыз которуу): Планировщик goroutine ишке ашуусун белгилүү бир убакыттан кийин (time slice) үзүп, башка goroutine'лер арасында процессор убактысын адилет бөлүштүрүүнү камсыздай алат.

Жумуш уурдоо (Work Stealing): P өзүнүн жергиликтүү кезегинде goroutine'лерди сарптаса, ал глобалдык кезектен же башка P'лердин кезектеринен goroutine'лерди "уурдап" алууга аракет кылышы мүмкүн.