Sobes.tech
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.