Fibras
Concurrencia cooperativa
Fibras es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ruby Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ruby Academy incluye 4 lecciones en total.
¿Qué es una fibra?
Una fibra es una unidad de ejecución ligera cuyo control usted maneja manualmente. A diferencia de los hilos, una fibra nunca se ejecuta por sí sola: usted le cede el control explícitamente y ella se lo devuelve.
- Esto se denomina concurrencia cooperativa.
- Las fibras son económicas de crear y pausar.
- Son la base de los generadores y de la E/S asíncrona en Ruby.
Crear y reanudar
Cree una fibra con Fiber.new e iníciela o continúela con resume. El bloque se ejecuta hasta que termina o se pausa.
fiber = Fiber.new do
puts "Inside the fiber"
end
fiber.resume
puts "Back in main"Pausar con yield
Fiber.yield pausa la fibra y devuelve el control a quien llamó a resume. El siguiente resume continúa justo después de yield.
fiber = Fiber.new do
puts "Step 1"
Fiber.yield
puts "Step 2"
end
fiber.resume
puts "Main between steps"
fiber.resumePasar valores al exterior
El argumento de Fiber.yield se convierte en el valor devuelto por resume. Esto permite que una fibra produzca una secuencia de valores bajo demanda.
fiber = Fiber.new do
Fiber.yield 10
Fiber.yield 20
30
end
puts fiber.resume
puts fiber.resume
puts fiber.resumePasar valores al interior
El argumento de resume se convierte en el valor devuelto por Fiber.yield dentro de la fibra. La comunicación fluye en ambas direcciones.
fiber = Fiber.new do
got = Fiber.yield "ready"
puts "Fiber received: " + got
end
puts fiber.resume
fiber.resume("hello")Un contador infinito
Como una fibra se pausa y se reanuda, puede modelar una secuencia diferida infinita sin calcularla por completo en ningún momento.
counter = Fiber.new do
n = 1
loop do
Fiber.yield n
n += 1
end
end
3.times { puts counter.resume }Comprobar si sigue activa
Fiber#alive? indica si la fibra todavía se puede reanudar. Reanudar una fibra terminada genera un FiberError.
fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_sFibras frente a hilos
Diferencias clave:
- El tiempo de ejecución programa los hilos; usted programa las fibras.
- Los hilos pueden sufrir una apropiación en cualquier momento; las fibras solo cambian en
yieldoresume. - Las fibras evitan las condiciones de carrera porque solo se ejecuta una y los puntos de cambio son explícitos.
Los enumeradores usan fibras
Los enumeradores diferidos de Ruby se basan en fibras. Un iterador externo se pausa entre valores, igual que una fibra cede el control.
enum = Enumerator.new do |y|
y << 1
y << 2
y << 3
end
puts enum.next
puts enum.nextFibras y E/S asíncrona
Ruby moderno incluye un enlace para el programador de fibras. Bibliotecas como la gema async lo utilizan para que, cuando una fibra espera E/S, el programador reanude automáticamente otra fibra.
Esto proporciona una alta concurrencia de E/S con código que se lee como código secuencial normal.
Cuándo usar fibras
Recurra a las fibras cuando necesite:
- Generadores diferidos que produzcan valores bajo demanda.
- Flujo de control al estilo de las corrutinas.
- Cambios de ejecución detallados y deterministas sin bloqueos.
Para la mayoría de los casos habituales de concurrencia, los hilos o la gema async (que utiliza fibras internamente) son más sencillos.
Comprobación rápida
Compruebe su comprensión de las fibras.
Repaso: fibras
Ha aprendido la concurrencia cooperativa con fibras:
Fiber.newjunto conresumeejecuta y continúa una fibra.Fiber.yieldpausa la fibra y devuelve el control.- Los valores fluyen en ambas direcciones mediante los argumentos de yield y resume.
- Las fibras hacen posibles los enumeradores y los programadores de E/S asíncrona.
A continuación: Ractors, que finalmente proporcionan paralelismo real.
Preguntas frecuentes
¿La lección «Fibras» es gratis?
Sí — el texto completo de «Fibras» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ruby Academy, actualiza a CoddyKit PRO. El curso de Ruby Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Fibras»?
Concurrencia cooperativa Practicas Ruby Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Ruby Academy?
No se requiere experiencia previa. Ruby Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Fibras»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Ruby Academy?
Sí. Cada lección de Ruby Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.