Sobes.tech
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 resumeyield metodları 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. Blok resume ilk çağırışında icra olunur.
  • fiber.resume(*args): Fiber-in icrasını davam etdirir. resume-a ötürülən arqumentlər Fiber.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ər resume-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ə yieldresume 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.