0Pricing
Ruby Academy · Lección

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.resume

Pasar 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.resume

Pasar 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_s

Fibras 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 yield o resume.
  • 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.next

Fibras 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.new junto con resume ejecuta y continúa una fibra.
  • Fiber.yield pausa 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.

Todas las lecciones de este curso

  1. Hilos
  2. El GVL explicado
  3. Fibras
  4. Ractors
← Volver a Ruby Academy