Middle+
¿Cómo están estructuradas las goroutines y cuánta memoria ocupan en la pila?
sobes.tech AI
Respuesta de la IA
Goroutine es un hilo de ejecución liviano gestionado por el entorno de ejecución de Go (runtime). Se multiplexan en un menor número de hilos del sistema (pool de hilos).
Componentes principales:
- Pila: Cada goroutine tiene una pila separada y expandible. Inicialmente pequeña (16KB con Go 1.4+, anteriormente 8KB), puede aumentar o disminuir según sea necesario.
- Planificador de Go: Implementa el modelo M:N (M goroutines en N hilos del sistema). Se encarga de cambiar entre goroutines en los hilos del sistema disponibles. La conmutación ocurre en operaciones bloqueantes (entrada/salida, espera en canal) o mediante la llamada explícita
runtime.Gosched(). - Contexto: Contiene un puntero al código máquina para la ejecución, un puntero a la pila y otra información meta necesaria para el planificador.
El tamaño inicial de la pila de una goroutine desde Go 1.4 es de 16KB. Este tamaño no es fijo y puede cambiar dinámicamente.