Sobes.tech
Middle+

Kas ir Fiber Ruby?

sobes.tech AI

Atbilde no AI

Fiber Ruby valodā ir viegls izpildes plūsma (korutina), kas ļauj izveidot vairākus paralēlus izpildes plūsmas vienā procesā / operētājsistēmas pavedienā. Tas ļauj pārvaldīt koda izpildes kārtību, pārslēdzoties starp Fiber'iem bez OS plānotāja iesaistes.

Galvenās Fiber īpašības:

  • Sadarbības plānošana: Fiber'i netiek piespiedu kārtā atdalīti no OS kodola. Pārslēgšanās starp tiem notiek skaidri, izmantojot resume un yield metodes.
  • Viena pavediena: Visi Fiber'i tiek izpildīti vienā pavedienā secīgi, bet pārslēgšanās starp tiem rada paralēluma ilūziju pavediena iekšienē.
  • Stāvokļa saglabāšana: Fiber atceras savu stāvokli (vietējos mainīgos, izpildes punktu), izsaucot yield, un atsāk to, izsaucot resume.

Fiber izmantošana:

  • Asinhrona koda realizācija: modelējot neblokējošas operācijas bez atpakaļsaišu vai sarežģītu konstrukciju izmantošanas.
  • Iteratori un ģeneratori: sarežģītu iteratoru izveide, kas ģenerē vērtības pēc pieprasījuma.
  • Beigu automātu modelēšana: stāvokļu un pāreju modelēšana skaidri.

Piemērs izmantošanai:

# Fiber izveide
fiber = Fiber.new do
  puts "Sveiki no Fiber 1"
  value1 = Fiber.yield(1) # pārtrauc izpildi, atgriež 1
  puts "Saņemts no Fiber 1: #{value1}"

  puts "Sveiki no Fiber 2"
  value2 = Fiber.yield(2) # pārtrauc izpildi, atgriež 2
  puts "Saņemts no Fiber 2: #{value2}"

  puts "Sveiki no Fiber 3"
  3 # Fiber pabeigšana, atgriež 3
end

puts "Galvenais: pirms pirmā `resume`"
result1 = fiber.resume # atsāk Fiber
puts "Galvenais: saņemts no Fiber: #{result1}"

puts "Galvenais: pirms otra `resume`"
result2 = fiber.resume("no Galvenā 1") # atsāk un pārsūta vērtību
puts "Galvenais: saņemts no Fiber: #{result2}"

puts "Galvenais: pirms trešā `resume`"
result3 = fiber.resume("no Galvenā 2") # atsāk un pārsūta vērtību
puts "Galvenais: saņemts no Fiber: #{result3}"

Galvenās metodes:

  • Fiber.new { ... }: izveido jaunu Fiber. Bloks tiek izpildīts pirmās resume izsaukšanas laikā.
  • fiber.resume(*args): atsāk Fiber izpildi. Argumenti, kas nodoti resume, kļūst par Fiber.yield atgrieztās vērtības vai sākuma bloka argumentiem.
  • Fiber.yield(*args): pārtrauc pašreizējo Fiber izpildi un atgriež kontroli kodam, kas to palaida (resume). Argumenti, kas nodoti yield, kļūst par resume atgrieztās vērtības.
  • Fiber.current: atgriež pašreizējo Fiber.

Fiber un pavediena atšķirības:

Raksturlielums Fiber Pavediens
Plānošana Sadarbība (skaidra pārslēgšanās) Priekšlaicīga (izsēšana, OS pārvaldīta)
Resursi Viegls (mazāk resursu) Smagāks (vairāk resursu)
Paralēlisms Mock-paralēlisms vienā pavedienā Patiesais paralēlisms (izmanto CPU kodolus)
Sazināšanās Ar yield un resume Ar kopīgu atmiņu, ziņojumu sūtīšanu u.c.
Debugging Salīdzinoši vienkāršāks (viena plūsma) Sarežģītāks (datu sacensības, bloķēšanas)

Fiber'i nodrošina zemāka līmeņa izpildes pārvaldības mehānismu, salīdzinot ar pavedienu, prasot skaidru pārslēgšanās pārvaldību.