0Pricing
Ruby Academy · Lektion

Fibers

Kooperative Nebenläufigkeit

Fibers ist eine kostenlose Ruby Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ruby Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist ein Fiber?

Ein Fiber ist eine leichte Ausführungseinheit, die Sie manuell steuern. Anders als Threads läuft ein Fiber niemals selbstständig; Sie übergeben ihm ausdrücklich die Kontrolle, und er gibt sie zurück.

  • Dies wird kooperative Nebenläufigkeit genannt.
  • Fibers lassen sich kostengünstig erstellen und pausieren.
  • Sie bilden die Grundlage für Generatoren und asynchrones I/O in Ruby.

Erstellen und fortsetzen

Erstellen Sie einen Fiber mit Fiber.new und starten oder setzen Sie ihn mit resume fort. Der Block läuft, bis er beendet oder pausiert wird.

fiber = Fiber.new do
  puts "Inside the fiber"
end

fiber.resume
puts "Back in main"

Mit yield pausieren

Fiber.yield pausiert den Fiber und gibt die Kontrolle an denjenigen zurück, der resume aufgerufen hat. Der nächste Aufruf von resume setzt die Ausführung direkt nach yield fort.

fiber = Fiber.new do
  puts "Step 1"
  Fiber.yield
  puts "Step 2"
end

fiber.resume
puts "Main between steps"
fiber.resume

Werte nach außen übergeben

Das Argument von Fiber.yield wird zum Rückgabewert von resume. Dadurch kann ein Fiber bei Bedarf eine Folge von Werten erzeugen.

fiber = Fiber.new do
  Fiber.yield 10
  Fiber.yield 20
  30
end

puts fiber.resume
puts fiber.resume
puts fiber.resume

Werte nach innen übergeben

Das Argument von resume wird zum Rückgabewert von Fiber.yield innerhalb des Fibers. Die Kommunikation funktioniert in beide Richtungen.

fiber = Fiber.new do
  got = Fiber.yield "ready"
  puts "Fiber received: " + got
end

puts fiber.resume
fiber.resume("hello")

Ein unendlicher Zähler

Da ein Fiber pausiert und fortgesetzt werden kann, lässt sich damit eine endlose verzögerte Sequenz modellieren, ohne jemals alles im Voraus berechnen zu müssen.

counter = Fiber.new do
  n = 1
  loop do
    Fiber.yield n
    n += 1
  end
end

3.times { puts counter.resume }

Prüfen, ob er aktiv ist

Fiber#alive? zeigt an, ob der Fiber noch fortgesetzt werden kann. Das Fortsetzen eines beendeten Fibers löst einen FiberError aus.

fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_s

Fibers und Threads im Vergleich

Die wichtigsten Unterschiede:

  • Threads werden von der Laufzeitumgebung eingeplant; Fibers werden von Ihnen eingeplant.
  • Threads können jederzeit unterbrochen werden; Fibers wechseln nur bei yield oder resume.
  • Fibers vermeiden Race Conditions, weil immer nur einer ausgeführt wird und die Wechselstellen ausdrücklich festgelegt sind.

Enumeratoren verwenden Fibers

Die verzögerten Enumeratoren von Ruby basieren auf Fibers. Ein externer Iterator pausiert zwischen Werten genauso, wie ein Fiber bei yield pausiert.

enum = Enumerator.new do |y|
  y << 1
  y << 2
  y << 3
end

puts enum.next
puts enum.next

Fibers und asynchrones I/O

Modernes Ruby enthält eine Schnittstelle für einen Fiber-Scheduler. Bibliotheken wie das async-Gem verwenden sie: Wenn ein Fiber auf I/O wartet, setzt der Scheduler automatisch einen anderen Fiber fort.

Dadurch wird eine hohe I/O-Nebenläufigkeit mit Code ermöglicht, der wie gewöhnlicher sequenzieller Code aussieht.

Wann Fibers verwendet werden sollten

Verwenden Sie Fibers, wenn Sie Folgendes benötigen:

  • Verzögerte Generatoren, die Werte bei Bedarf erzeugen.
  • Kontrollfluss im Stil von Coroutines.
  • Feingranulare, deterministische Wechsel ohne Sperren.

Für die alltägliche Nebenläufigkeit sind Threads oder das async-Gem (das intern Fibers verwendet) meistens einfacher.

Kurze Überprüfung

Testen Sie Ihr Verständnis von Fibers.

Zusammenfassung: Fibers

Sie haben kooperative Nebenläufigkeit mit Fibers gelernt:

  • Fiber.new zusammen mit resume führt einen Fiber aus und setzt ihn fort.
  • Fiber.yield pausiert den Fiber und gibt die Kontrolle zurück.
  • Werte werden über die Argumente von yield und resume in beide Richtungen übertragen.
  • Fibers bilden die Grundlage für Enumeratoren und Scheduler für asynchrones I/O.

Als Nächstes: Ractors, die Ihnen endlich echte Parallelität ermöglichen.

Häufig gestellte Fragen

Ist die Lektion „Fibers“ kostenlos?

Ja — der vollständige Text von „Fibers“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ruby Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Fibers“?

Kooperative Nebenläufigkeit Du übst Ruby Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ruby Academy zu starten?

Keine Vorkenntnisse erforderlich. Ruby Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Fibers“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ruby Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ruby Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Threads
  2. Die GVL erklärt
  3. Fibers
  4. Ractors
← Zurück zu Ruby Academy