Sobes.tech
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 resume ja yield meetodeid.
  • Ü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 seda resume-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 esimese resume väljakutse ajal.
  • fiber.resume(*args): jätkab Fiber'i täitmist. Argumendid, mis edastatakse resume-le, muutuvad Fiber.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 edastatakse yield-i, muutuvad resume-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.