Sobes.tech
Junior — Middle

U kojim slučajevima tokovi izvlače goroutine iz zajedničkog globalnog skladišta zadataka?

sobes.tech АИ

Одговор од АИ

U Go-u, niti (M — niti operativnog sistema) izvlače goroutine-ove (G) iz zajedničkog globalnog bazena zadataka (global run queue) u sledećim slučajevima:

  • Kada se nit oslobodi i spremna je da izvrši novu goroutine
  • Ako je lokalni bazen goroutine-ova (local run queue) niti prazan
  • Tokom balansiranja opterećenja između niti, kada se goroutine-ovi redistribuiraju

Jednostavno rečeno, kada nit nije zauzeta izvršavanjem goroutine-a, pokušava da preuzme sledeću iz globalnog bazena, kako ne bi stajala neaktivna. Ovo obezbeđuje efikasnu raspodelu goroutine-ova između niti i maksimalno iskorišćenje resursa procesora.

Ovaj mehanizam je implementiran u scheduler-u Go (scheduler), koji upravlja M (niti), P (procesorske kontekste) i G (goroutine-ove).