Ruby Academy · Les

Fibers

Coöperatieve concurrency

Les 3 van 413 stappen

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

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

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

Fibers 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 yield of resume.
  • 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.next

Fibers 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.new plus resume voert een fiber uit en zet deze voort.
  • Fiber.yield pauzeert 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.

Gratis beginnen

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.

Alle lessen in deze cursus

  1. Threads
  2. De GVL uitgelegd
  3. Fibers
  4. Ractors
← Terug naar Ruby Academy