Fibers
Coöperatieve concurrency
Fibers is een gratis Ruby Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Ruby Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Ruby Academy bevat in totaal 4 lessen.
Wat is een Fiber?
Een Fiber is een lichtgewicht uitvoeringseenheid die je handmatig bestuurt. In tegenstelling tot threads draait een fiber nooit vanzelf; je geeft er expliciet de besturing aan en de fiber geeft die terug.
- Dit heet coöperatieve gelijktijdigheid.
- Fibers zijn goedkoop om te maken en te pauzeren.
- Ze vormen de basis voor generatoren en asynchrone I/O in Ruby.
Een fiber maken en hervatten
Maak een fiber met Fiber.new en start of hervat deze met resume. Het blok wordt uitgevoerd totdat het klaar is of pauzeert.
fiber = Fiber.new do
puts "Inside the fiber"
end
fiber.resume
puts "Back in main"Pauzeren met yield
Fiber.yield pauzeert de fiber en geeft de besturing terug aan degene die resume heeft aangeroepen. De volgende resume gaat direct na yield verder.
fiber = Fiber.new do
puts "Step 1"
Fiber.yield
puts "Step 2"
end
fiber.resume
puts "Main between steps"
fiber.resumeWaarden naar buiten doorgeven
Het argument van Fiber.yield wordt de retourwaarde van resume. Zo kan een fiber op verzoek een reeks waarden produceren.
fiber = Fiber.new do
Fiber.yield 10
Fiber.yield 20
30
end
puts fiber.resume
puts fiber.resume
puts fiber.resumeWaarden naar binnen doorgeven
Het argument van resume wordt de retourwaarde van Fiber.yield binnen de fiber. Communicatie gaat beide kanten op.
fiber = Fiber.new do
got = Fiber.yield "ready"
puts "Fiber received: " + got
end
puts fiber.resume
fiber.resume("hello")Een oneindige teller
Omdat een fiber pauzeert en hervat wordt, kan deze een eindeloze luie reeks modelleren zonder ooit alles te berekenen.
counter = Fiber.new do
n = 1
loop do
Fiber.yield n
n += 1
end
end
3.times { puts counter.resume }Controleren of deze actief is
Fiber#alive? geeft aan of de fiber nog kan worden hervat. Een dode fiber hervatten werpt een FiberError op.
fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_sFibers versus threads
Belangrijkste verschillen:
- Threads worden door de runtime gepland; fibers worden gepland door jou.
- Threads kunnen op elk moment worden onderbroken; fibers wisselen alleen bij
yieldofresume. - Fibers voorkomen racecondities, omdat er maar één tegelijk draait en wisselmomenten expliciet zijn.
Enumerators gebruiken Fibers
Ruby's luie enumerators zijn gebaseerd op fibers. Een externe iterator pauzeert tussen waarden, net zoals een fiber waarden oplevert met yield.
enum = Enumerator.new do |y|
y << 1
y << 2
y << 3
end
puts enum.next
puts enum.nextFibers en asynchrone I/O
Moderne Ruby bevat een fiberscheduler-haak. Bibliotheken zoals de async-gem gebruiken deze, zodat de planner automatisch een andere fiber hervat wanneer één fiber op I/O wacht.
Dit biedt I/O met hoge gelijktijdigheid, met code die leest als gewone sequentiële code.
Wanneer je Fibers gebruikt
Gebruik fibers wanneer je het volgende nodig hebt:
- Luie generatoren die op verzoek waarden produceren.
- Besturingsstroom in coroutine-stijl.
- Fijnmazig, deterministisch wisselen zonder vergrendelingen.
Voor de meeste dagelijkse gelijktijdigheid zijn threads of de async-gem (die onder water fibers gebruikt) eenvoudiger.
Kennischeck
Toets je begrip van fibers.
Samenvatting: Fibers
Je hebt coöperatieve gelijktijdigheid met fibers geleerd:
Fiber.newplusresumevoert een fiber uit en zet deze voort.Fiber.yieldpauzeert en geeft de besturing terug.- Waarden stromen beide kanten op via argumenten van yield en resume.
- Fibers vormen de basis voor enumerators en asynchrone I/O-planners.
Vervolgens: Ractors, die je eindelijk echt parallellisme bieden.
Leer Ruby met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 29
- Lessen
- 109
Veelgestelde vragen
Is de les “Fibers” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Ruby Academy, waaronder “Fibers”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Ruby Academy bevat in totaal 4 lessen.
Wat leer ik in “Fibers”?
Coöperatieve concurrency Je oefent met Ruby Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Ruby Academy te beginnen?
Ervaring vooraf is niet nodig. Ruby Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Fibers”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Ruby Academy?
Ja. Elke les over Ruby Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.