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.resumeWerte 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.resumeWerte 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_sFibers 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
yieldoderresume. - 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.nextFibers 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.newzusammen mitresumeführt einen Fiber aus und setzt ihn fort.Fiber.yieldpausiert 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.