Skip to content

Runtime

El tiempo de ejecución (runtime) del lenguaje Go es la infraestructura central para la ejecución de programas Go. Es responsable de gestionar la asignación de memoria, la recolección de basura, la planificación de goroutines, la monitorización del sistema y otras funciones clave. A diferencia de otros lenguajes, el runtime de Go está estrechamente integrado con el código de usuario, lo que permite a Go lograr una programación concurrente eficiente y una gestión automática de memoria.

Componentes Principales

El runtime de Go se compone principalmente de los siguientes componentes principales:

Planificador GMP

El planificador GMP es uno de los componentes más importantes del runtime de Go. Es responsable de asignar razonablemente un gran número de goroutines a un número limitado de hilos del sistema para su ejecución. GMP representa:

  • G (Goroutine): Goroutine, hilo ligero en Go
  • M (Machine): Hilo del sistema, hilo de ejecución a nivel de sistema operativo
  • P (Processor): Procesador, contiene los recursos necesarios para ejecutar código Go

El diseño del planificador GMP permite a Go soportar eficientemente miles de goroutines concurrentes, siendo la piedra angular de la característica de alta concurrencia del lenguaje Go.

Asignador de Memoria

El asignador de memoria de Go es responsable de gestionar la asignación de memoria del heap. Su diseño está profundamente influenciado por TCMalloc de Google. Características principales:

  • Diseño de caché multinivel para reducir la contención de locks
  • Adopta diferentes estrategias de asignación según el tamaño del objeto
  • Decide automáticamente si el objeto se asigna en el stack o en el heap

El asignador de memoria trabaja estrechamente con el recolector de basura para lograr una gestión eficiente de memoria.

Recolector de Basura

Go adopta el algoritmo de recolección de basura Concurrent Mark-Sweep. Características principales:

  • Algoritmo de marcado tricromático
  • Tecnología de write barrier para recolección concurrente
  • Baja latencia, en la mayoría de los casos el tiempo STW es inferior a 100 microsegundos

El recolector de basura de Go ha sido optimizado durante años y puede satisfacer los requisitos de rendimiento de la mayoría de los escenarios de negocio.

Monitor del Sistema

El monitor del sistema (sysmon) es un hilo de monitorización independiente, responsable de:

  • Preemptir goroutines que se ejecutan durante mucho tiempo
  • Verificar si es necesario activar la recolección de basura
  • Monitorizar el estado del sistema y hacer los ajustes correspondientes

Se ejecuta continuamente en segundo plano para garantizar la ejecución estable de programas Go.

Sugerencias de Aprendizaje

Se recomienda aprender los conocimientos relacionados con el runtime en el siguiente orden:

  1. Primero aprender el planificador GMP, comprender el mecanismo de planificación de goroutines
  2. Luego aprender el asignador de memoria, entender cómo se asigna la memoria
  3. Después aprender el recolector de basura, entender cómo se recicla la memoria
  4. Finalmente aprender el monitor del sistema, entender el mecanismo de monitorización en segundo plano del runtime

Golang editado por www.golangdev.cn