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
resumeunyieldmetodes. - 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, izsaucotresume.
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āsresumeizsaukšanas laikā.fiber.resume(*args): atsāk Fiber izpildi. Argumenti, kas nodotiresume, kļūst parFiber.yieldatgrieztā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 nodotiyield, kļūst parresumeatgrieztā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.