¿Qué son los hilos verdes (green threads)?
sobes.tech AI
Respuesta de la IA
Los hilos verdes son hilos gestionados a nivel de espacio de usuario, no por el sistema operativo. No se muestran directamente en los hilos del SO. La planificación y el cambio de contexto entre hilos verdes se realizan en tiempo de ejecución del lenguaje de programación o mediante una biblioteca especializada.
Características principales:
- Gestión: Se realiza completamente en tiempo de ejecución.
- Recursos: Requieren menos recursos del sistema (memoria y tiempo de CPU) en comparación con los hilos nativos del SO para su creación y cambio.
- Planificación: No preemptiva (multitarea cooperativa). El hilo debe ceder explícitamente el control para que otro hilo verde pueda ejecutarse.
- Paralelismo: Debido a la planificación no preemptiva y a la gestión en espacio de usuario, los hilos verdes en un sentido explícito no soportan ejecución paralela en procesadores multinúcleo sin mecanismos adicionales (por ejemplo, usar múltiples procesos, cada uno con sus propios hilos verdes).
En Ruby, especialmente en versiones antiguas (antes de 1.9) y con MRI (Matz's Ruby Interpreter), se usaban hilos verdes. Esto causaba problemas de rendimiento en sistemas multinúcleo, ya que solo un hilo verde podía ejecutarse en un momento dado, bloqueado por el Global Interpreter Lock (GIL). En versiones más recientes de MRI y en implementaciones alternativas (JRuby, Rubinius), se usan hilos nativos del SO.
# Ejemplo de uso de hilos en Ruby (dependiendo de la versión y la implementación, pueden ser verdes o nativos)
t1 = Thread.new do
puts "Hilo 1 iniciado"
sleep(1)
puts "Hilo 1 terminado"
end
t2 = Thread.new do
puts "Hilo 2 iniciado"
sleep(1)
puts "Hilo 2 terminado"
end
t1.join # Espera a que termine el hilo t1
t2.join # Espera a que termine el hilo t2
puts "Todos los hilos han terminado"
Comparación entre hilos verdes y nativos:
| Característica | Hilos verdes | Hilos nativos del SO |
|---|---|---|
| Gestión | Espacio de usuario | Núcleo del SO |
| Creación/Cambio | Más barato | Más caro |
| Planificación | Cooperativa (no preemptiva) | Preemptiva |
| Paralelismo | Limitado (un CPU) sin mecanismos | Completo (múltiples CPU) |
| Llamadas bloqueantes | Bloquean todo el intérprete/proceso | Solo bloquean el hilo nativo actual |
En el contexto del Ruby moderno (desde 1.9 en adelante con MRI), los hilos Thread son hilos nativos del SO. Los hilos verdes, como modelo principal de paralelismo, son ahora raros en MRI, pero pueden encontrarse en bibliotecas específicas o en run-times alternativos.