POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Comprendiendo Goroutines y Concurrencia en Go

Goroutines y Concurrencia en Go: Comprender la ejecución concurrente en Go

Publicado el 16/08/2025

Entendiendo goroutines, concurrencia y el planificador en Go: este artículo explica de forma clara qué ocurre cuando lanzamos goroutines y cómo el runtime de Go aprovecha procesadores multicore para ofrecer concurrencia y, cuando es posible, paralelismo.

Concurrency vs Parallelism: la concurrencia es la capacidad de estructurar un programa como tareas que progresan de forma independiente; no siempre se ejecutan al mismo tiempo pero avanzan sin bloquear el diseño global. El paralelismo implica la ejecución simultánea real de varias tareas sobre hardware que lo permite.

Goroutine: una goroutine es un hilo de ejecución ligero gestionado por el usuario dentro del runtime de Go. A diferencia de un hilo del sistema operativo, las goroutines son muy baratas de crear, con stacks iniciales pequeños, y pueden escalar a millones sin agotar el sistema. Para lanzar una goroutine basta con escribir go doWork() y el scheduler de Go se encarga de ejecutarla concurrentemente.

Modelo del scheduler de Go: G M P. Go usa un planificador M:N. Muchas goroutines G se multiplexan sobre un número menor de hilos del sistema M, coordinados por procesadores lógicos P. Componentes: G para goroutine, M para máquina o hilo del sistema operativo, y P para procesador lógico, el contexto necesario para ejecutar código Go. Solo un M con un P asociado puede ejecutar código Go en un instante dado.

Cómo trabajan juntos: cada P mantiene una cola local de goroutines listas para ejecutar. Un P se adjunta a lo sumo a un M al tiempo. Un M ejecuta una sola goroutine G a la vez. Si una goroutine bloquea por I O u otra operación, el M puede desprenderse y el P se reasigna para que otro M continúe la ejecución.

Al iniciar muchas goroutines: si lanzamos, por ejemplo, miles o cientos de miles de goroutines, Go crea varios P según GOMAXPROCS y el runtime crea M suficientes para ejecutar esas P. Las goroutines se distribuyen en las colas locales de los P y se ejecutan una a una en cada P usando un M. El scheduler gestiona finalizaciones y bloqueos y selecciona la siguiente goroutine disponible.

Cambio de contexto y concurrencia: dado que el número de goroutines suele ser mayor que el número de P o hilos CPU, Go usa cambio de contexto para simular ejecución concurrente. Cuando una goroutine bloquea se pausa, se guarda su estado (program counter, stack pointer, etc.) y el P elige otra goroutine ejecutable. Mucho de esto ocurre en espacio de usuario, lo que evita llamadas al sistema costosas y hace el cambio rápido.

Ejemplo con un solo núcleo: aunque solo haya un núcleo físico, el scheduler de Go alterna rápidamente entre goroutines, creando la ilusión de concurrencia. Esto combina planificación cooperativa y planificación preventiva para permitir que múltiples goroutines progresen en una sola CPU.

Relaciones y límites: P a M es 1 a 1 en un momento dado; un P se asigna a un M y si el M bloquea el scheduler busca otro M libre. P a G es 1 a muchos, un P mantiene una cola con muchas G pero ejecuta una por vez. M a G también es 1 a 1 en ejecución, un M ejecuta la goroutine que el P le entrega.

Work stealing y cola global: si la cola local de un P queda vacía puede robar trabajo de la cola de otro P o tomar tareas de una cola global de respaldo. Esto equilibra la carga y mantiene ocupados los procesadores para que las goroutines se distribuyan de forma eficiente.

Paralelismo en CPUs multicore: en una máquina con 8 cores y 16 hilos lógicos, GOMAXPROCS suele establecerse en 16 por defecto, lo que permite hasta 16 goroutines ejecutándose en paralelo, una por hilo lógico. El resto de goroutines se planifican cooperativamente, por lo que los programas Go aprovechan tanto el paralelismo real como la concurrencia en sistemas más limitados.

Herramientas y diagnóstico: para profundizar se pueden usar runtime/trace, pprof y go tool trace para visualizar comportamientos de goroutines durante la ejecución y entender cuellos de botella, bloqueos y eficiencia del scheduler.

Aplicaciones reales y Q2BSTUDIO: en Q2BSTUDIO somos especialistas en desarrollo de software a medida y aplicaciones a medida que aprovechan la concurrencia y el rendimiento de Go cuando corresponde. Ofrecemos soluciones de software a medida, inteligencia artificial e ia para empresas, agentes IA, servicios inteligencia de negocio y power bi para visualización avanzada. También proporcionamos ciberseguridad, servicios cloud aws y azure e integración de modelos de inteligencia artificial en aplicaciones empresariales.

Por qué elegir Q2BSTUDIO: diseñamos arquitecturas escalables y seguras que usan las mejores prácticas en concurrencia y paralelismo, desarrollamos software a medida optimizado para microservicios y aplicaciones de alto rendimiento, implementamos soluciones de inteligencia artificial y agentes IA para automatizar procesos y ofrecer insights a través de servicios inteligencia de negocio. Nuestras capacidades en ciberseguridad y servicios cloud aws y azure aseguran despliegues fiables y protegidos en entornos cloud.

Resumen y llamada a la acción: comprender cómo Go gestiona las goroutines, el scheduler G M P, el equilibrio de colas y la ejecución en múltiples núcleos ayuda a diseñar sistemas más eficientes. Si quieres que tu proyecto aproveche concurrencia real, paralelismo y capacidades de inteligencia artificial, contacta con Q2BSTUDIO para desarrollar software a medida, aplicaciones a medida y soluciones avanzadas en inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, agentes IA y power bi.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio