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. Този размер не е фиксиран и може да се променя динамично.