Middle+
Ruby-də Fiber nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Fiber Ruby-də yüngül işıq axını (coroutine) olub, bir əməliyyat / əməliyyat sistemi təkində çox paralel iş axını yaratmağa imkan verir. Bu, kodun icra sırasını idarə etməyə və əməliyyat sistemi planlayıcısına daxil olmadan Fiber arasında keçid etməyə imkan verir.
Fiber-in əsas xüsusiyyətləri:
- Əməkdaşlıq ilə planlaşdırma: Fiber-lər əməliyyat sistemi nüvəsi tərəfindən zorla dayandırılmır. Onlar
resumevəyieldmetodları ilə açıq şəkildə keçid edir. - Tək işçi: Bütün Fiber-lər bir işçi daxilində ardıcıl icra olunur, lakin onların arasında keçid işçi daxilində kod üçün paralelliyi illüziyasını yaradır.
- Vəziyyətin saxlanması: Fiber
yieldçağırışında öz vəziyyətini (yerli dəyişənlər, icra nöqtəsi) yadda saxlayır vəresumeçağırışında bərpa edir.
Fiber-in tətbiqi:
- Asinxron kodun həyata keçirilməsi: Gecikmədən əməliyyatların modelləşdirilməsi, callback-lər və ya mürəkkəb strukturlar istifadə etmədən.
- İteratorlar və generatorlar: Tələb əsasında dəyərlər yaradan mürəkkəb iteratörlərin yaradılması.
- Sonlu avtomatların işlənməsi: Vəziyyətlərin və keçidlərin açıq şəkildə modelləşdirilməsi.
İstifadə nümunəsi:
# Fiber yaradılması
fiber = Fiber.new do
puts "Fiber 1-dən salam"
value1 = Fiber.yield(1) # icra dayandırılır, 1 qaytarılır
puts "Fiber 1-dən alınan: #{value1}"
puts "Fiber 2-dən salam"
value2 = Fiber.yield(2) # icra dayandırılır, 2 qaytarılır
puts "Fiber 2-dən alınan: #{value2}"
puts "Fiber 3-dən salam"
3 # Fiber-in tamamlanması, 3 qaytarılır
end
puts "Əsas: Birinci resume-dən əvvəl"
result1 = fiber.resume # Fiber-in icrasını davam etdirir
puts "Əsas: Fiber-dən alınan: #{result1}"
puts "Əsas: İkinci resume-dən əvvəl"
result2 = fiber.resume("Əsas 1-dən") # icranı davam etdirir və dəyər ötürür
puts "Əsas: Fiber-dən alınan: #{result2}"
puts "Əsas: Üçüncü resume-dən əvvəl"
result3 = fiber.resume("Əsas 2-dən") # icranı davam etdirir və dəyər ötürür
puts "Əsas: Fiber-dən alınan: #{result3}"
Əsas metodlar:
Fiber.new { ... }: Yeni Fiber yaradır. Blokresumeilk çağırışında icra olunur.fiber.resume(*args): Fiber-in icrasını davam etdirir.resume-a ötürülən arqumentlərFiber.yield-dən və ya blokun başlanğıc arqumentlərindən qaytarılır.Fiber.yield(*args): Mövcud Fiber-in icrasını dayandırır və idarəni onu işə salan koda qaytarır (resume).yield-ə ötürülən arqumentlərresume-dən qaytarılır.Fiber.current: Mövcud Fiber-i qaytarır.
Fiber və Thread arasındakı fərq:
| Xüsusiyyət | Fiber | Thread |
|---|---|---|
| Planlaşdırma | Əməkdaşlıq ilə (açıq keçid) | Preemptive (zorla dayandırma, OS idarə edir) |
| Resurslar | Yüngül (az resurs tələb edir) | Daha ağır (daha çox resurs) |
| Paralellik | Bir işçi daxilində saxta paralellik | Əsl paralellik (CPU nüvələrindən istifadə edir) |
| Əlaqə | yield və resume vasitəsilə |
Ümumi yaddaş, mesaj ötürmə və s. |
| Debugging | Nisbətən asan (xətti axın) | Daha çətindir (münaqişələr, kilidləmələr) |
Fiber-lər Thread-ə nisbətən aşağı səviyyəli idarəetmə mexanizmi təqdim edir və açıq şəkildə keçidlərə nəzarət tələb edir.