Sobes.tech
Middle+

Jak jsou gorutiny uspořádány a kolik paměti zabírají ve zásobníku?

sobes.tech AI

Odpověď od AI

Goroutine je lehký vlákno provádění spravované prostředím běhu Go (runtime). Jsou multiplexovány na menší počet systémových vláken (vláknový pool).

Hlavní komponenty:

  • Zásobník: Každá goroutine má samostatný, rozšiřitelný zásobník. Původně malý (16KB s Go 1.4+, dříve 8KB), může se zvětšovat nebo zmenšovat podle potřeby.
  • Plánovač Go: Implementuje model M:N (M goroutines na N systémových vláken). Je zodpovědný za přepínání mezi goroutines na dostupných systémových vláknech. Přepínání probíhá při blokujících operacích (vstup/výstup, čekání na kanál) nebo explicitním voláním runtime.Gosched().
  • Kontext: Obsahuje ukazatel na strojový kód pro provádění, ukazatel na zásobník a další metainformace potřebné plánovači.

Počáteční velikost zásobníku goroutine od verze Go 1.4 je 16KB. Tato velikost není pevná a může se dynamicky měnit.