Middle+
Mis on Fiber Ruby's?
sobes.tech AI
Vastus AI-lt
Fiber Ruby-s on kerge täitmisvoog (korutina), mis võimaldab luua mitu paralleelset täitmisvoogu ühes protsessis / operatsioonisüsteemi lõimes. See võimaldab hallata koodi täitmise järjekorda, vahetades Fiber'eid ilma OS-i ajastaja sekkumiseta.
Fiber'i peamised omadused:
- Koostöö planeerimine: Fiber'eid ei katkestata OS-i tuuma poolt sunniviisiliselt. Vahetus nende vahel toimub selgelt kasutades
resumejayieldmeetodeid. - Üks lõim: Kõik Fiber'id täidetakse järjest ühes lõimes, kuid vahetused nende vahel loovad lõime sees illusiooni paralleelsusest.
- Oleku säilitamine: Fiber mäletab oma olekut (kohalikud muutujad, täitmise punkt)
yield-i väljakutse ajal ja jätkab sedaresume-i väljakutsega.
Fiber'i kasutamine:
- Asünkroonse koodi realiseerimine: mudeldades mitteblokeerivaid operatsioone ilma tagasiside või keerukate konstruktsioonideta.
- Iteraatorite ja generaatorite loomine: keerukate iteratsioonide loomine, mis genereerivad väärtusi nõudmisel.
- Lõppautomaatide modelleerimine: olekute ja üleminekute mudeldamine selgelt.
Näide kasutamisest:
# Fiber'i loomine
fiber = Fiber.new do
puts "Tere Fiber 1-st"
value1 = Fiber.yield(1) # peatab täitmise, tagastab 1
puts "Saadud Fiber'ist 1: #{value1}"
puts "Tere Fiber 2-st"
value2 = Fiber.yield(2) # peatab täitmise, tagastab 2
puts "Saadud Fiber'ist 2: #{value2}"
puts "Tere Fiber 3-st"
3 # Fiber'i lõpetamine, tagastab 3
end
puts "Peamine: enne esimest `resume`"
result1 = fiber.resume # jätkab Fiber'i
puts "Peamine: Fiber'ist saadud: #{result1}"
puts "Peamine: enne teist `resume`"
result2 = fiber.resume("peamine 1-st") # jätkab ja edastab väärtuse
puts "Peamine: Fiber'ist saadud: #{result2}"
puts "Peamine: enne kolmandat `resume`"
result3 = fiber.resume("peamine 2-st") # jätkab ja edastab väärtuse
puts "Peamine: Fiber'ist saadud: #{result3}"
Peamised meetodid:
Fiber.new { ... }: loob uue Fiber'i. Blokk täidetakse esimeseresumeväljakutse ajal.fiber.resume(*args): jätkab Fiber'i täitmist. Argumendid, mis edastatakseresume-le, muutuvadFiber.yield-i tagastatavaks väärtuseks või algusbloki argumentideks.Fiber.yield(*args): peatab praeguse Fiber'i täitmise ja annab kontrolli tagasi käivitanud koodile (resume). Argumendid, mis edastatakseyield-i, muutuvadresume-i tagastatavaks väärtuseks.Fiber.current: tagastab praeguse Fiber'i.
Fiber'i ja lõime erinevused:
| Iseloomustus | Fiber | Lõim |
|---|---|---|
| Planeerimine | Koostöö (selge vahetus) | Eelnevalt määratud (OS-i juhitav) |
| Ressursid | Kerged (vähem ressursse) | Raskem (rohkem ressursse) |
| Paralleelsus | Mock-paralleelsus ühes lõimes | Tõeline paralleelsus (kasutab CPU tuumasid) |
| Suhtlus | Läbi yield ja resume |
Läbi ühise mälu, sõnumite edastamise jms. |
| Silumine | Võrdlemisi lihtsam (ühe voog) | Raskem (andmelõksud, lukud) |
Fiber'id pakuvad madalama taseme täitmise haldamise mehhanismi võrreldes lõimega, nõudes selget vahetusjuhtimist.