Sobes.tech
Senior

Ce este o gorutină? Cu ce diferă de un fir de sistem? Vorbește despre planificatorul Go (GMP).

sobes.tech AI

Răspuns de la AI

Goroutine este un fir de execuție ușor în limbajul Go, gestionat de runtime-ul Go și nu de sistemul de operare. Spre deosebire de un fir de sistem, goroutine-urile au o dimensiune a stivei mult mai mică (începând cu câțiva kilobytes și putând crește dinamic), ceea ce permite rularea a mii și chiar milioane de goroutine-uri simultan cu costuri reduse.

Firurile de sistem sunt create și programate de sistemul de operare, au o stivă fixă mare și operații de schimbare a contextului mai costisitoare.

Planificatorul Go se bazează pe modelul GMP:

  • G (goroutine) — goroutine-ul în sine, unitatea de execuție.
  • M (mașină) — fir de sistem (thread OS) pe care rulează goroutine-urile.
  • P (procesor) — procesor logic, resursă necesară pentru a executa o goroutine pe M.

P gestionează coada goroutine-urilor gata pentru execuție (G). M poate executa doar o goroutine la un moment dat, dar datorită existenței mai multor M și P, planificatorul distribuie eficient goroutine-urile între firele de sistem, asigurând concurență și paralelism.

Această abordare permite Go să utilizeze eficient resursele sistemului și să scaleze pe sisteme multiprocesor.