Sobes.tech
Middle+

Как са структурирани горутините и колко памет заемат в стека?

sobes.tech AI

Отговор от AI

Goroutine е леко тегло поток за изпълнение, управляван от средата за изпълнение на Go (runtime). Те мултиплексират върху по-малко системни потоци (пул от нишки).

Основни компоненти:

  • Стек: Всяка goroutine има отделен, разширяем стек. Първоначално малък (16KB с Go 1.4+, преди това 8KB), може да се увеличава или намалява при необходимост.
  • Планировчик на Go: Реализира модел M:N (M goroutines върху N системни нишки). Отговаря за превключването между goroutines на наличните системни нишки. Превключването става при блокиращи операции (въвеждане/извеждане, изчакване на канал) или чрез явен извик runtime.Gosched().
  • Контекст: Съдържа указател към машинния код за изпълнение, указател към стека и други метаинформации, необходими на планировчика.

Началният размер на стека на goroutine от Go 1.4 е 16KB. Този размер не е фиксиран и може да се променя динамично.