Fibers
Kooperativ samtidighed
Fibers er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvad er en Fiber?
En Fiber er en letvægtsenhed til udførelse, som du selv styrer. I modsætning til tråde kører en fiber aldrig af sig selv; du giver den eksplicit kontrollen, og den giver kontrollen tilbage.
- Dette kaldes kooperativ samtidighed.
- Fibers er billige at oprette og sætte på pause.
- De er grundlaget for generatorer og asynkron I/O i Ruby.
Oprettelse og genoptagelse
Opret en fiber med Fiber.new, og start eller genoptag den med resume. Blokken kører, indtil den afsluttes eller sættes på pause.
fiber = Fiber.new do
puts "Inside the fiber"
end
fiber.resume
puts "Back in main"Pause med yield
Fiber.yield sætter fiberen på pause og giver kontrollen tilbage til den, der kaldte resume. Den næste resume fortsætter lige efter yield.
fiber = Fiber.new do
puts "Step 1"
Fiber.yield
puts "Step 2"
end
fiber.resume
puts "Main between steps"
fiber.resumeAfsendelse af værdier
Argumentet til Fiber.yield bliver returværdien fra resume. Det lader en fiber producere en række værdier efter behov.
fiber = Fiber.new do
Fiber.yield 10
Fiber.yield 20
30
end
puts fiber.resume
puts fiber.resume
puts fiber.resumeModtagelse af værdier
Argumentet til resume bliver returværdien fra Fiber.yield inde i fiberen. Kommunikationen går begge veje.
fiber = Fiber.new do
got = Fiber.yield "ready"
puts "Fiber received: " + got
end
puts fiber.resume
fiber.resume("hello")En uendelig tæller
Fordi en fiber sættes på pause og genoptages, kan den repræsentere en uendelig, doven sekvens uden nogensinde at beregne det hele.
counter = Fiber.new do
n = 1
loop do
Fiber.yield n
n += 1
end
end
3.times { puts counter.resume }Sådan tjekker du, om den er i live
Fiber#alive? fortæller dig, om fiberen stadig kan genoptages. Genoptagelse af en død fiber udløser en FiberError.
fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_sFibers versus tråde
Vigtige forskelle:
- Tråde planlægges af kørselssystemet; fibers planlægges af dig.
- Tråde kan blive afbrudt når som helst; fibers skifter kun ved
yieldellerresume. - Fibers undgår kapløbstilstande, fordi kun én kører ad gangen, og skiftepunkterne er eksplicitte.
Enumeratorer bruger Fibers
Rubys dovne enumeratorer er bygget på fibers. En ekstern iterator sættes på pause mellem værdier på samme måde, som en fiber giver kontrollen tilbage.
enum = Enumerator.new do |y|
y << 1
y << 2
y << 3
end
puts enum.next
puts enum.nextFibers og asynkron I/O
Moderne Ruby indeholder et tilslutningspunkt til en fiberplanlægger. Biblioteker som async-gemmet bruger det, så når en fiber venter på I/O, genoptager planlæggeren automatisk en anden fiber.
Det giver I/O med høj samtidighed med kode, der læses som almindelig sekventiel kode.
Hvornår skal du bruge Fibers
Vælg fibers, når du har brug for:
- Dovne generatorer, der producerer værdier efter behov.
- Kontrolflow i koroutine-stil.
- Finkornet, deterministisk skift uden låse.
Til de fleste almindelige samtidighedsopgaver er tråde eller async-gemmet, som bruger fibers i baggrunden, nemmere.
Hurtigt tjek
Tjek din forståelse af fibers.
Opsamling: Fibers
Du har lært kooperativ samtidighed med fibers:
Fiber.newsammen medresumekører og fortsætter en fiber.Fiber.yieldsætter fiberen på pause og giver kontrollen tilbage.- Værdier bevæger sig i begge retninger via argumenter til yield og resume.
- Fibers driver enumeratorer og asynkrone I/O-planlæggere.
Dernæst: Ractors, som endelig giver dig ægte parallelisme.
Lær Ruby med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 109
Ofte stillede spørgsmål
Er lektionen “Fibers” gratis?
Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “Fibers”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Fibers”?
Kooperativ samtidighed Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Ruby Academy?
Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Fibers”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Ruby Academy-lektion?
Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.