Sobes.tech
Middle+

Ruby'da Fiber nima?

sobes.tech AI

AIdan javob

Ruby'da Fiber, operatsion tizimining bitta jarayon / ipni ichida bir nechta parallel bajariladigan oqimlarni yaratishga imkon beradigan yengil vaznli bajarilish oqimi (koreografi) hisoblanadi. Bu kodning bajarilish tartibini boshqarishga imkon beradi va Fiberlar orasida OS rejalashtiruvchisiga aralashmasdan o'tishni ta'minlaydi.

Fiberning asosiy xususiyatlari:

  • Hamkorlikda rejalashtirish: Fiberlar OS yadrosi tomonidan oldindan to'xtatilmaydi. Ular orasidagi o'tish resume va yield metodlari yordamida aniq amalga oshiriladi.
  • Yagona ip: Barcha Fiberlar bir ipda ketma-ket bajariladi, ammo ular orasidagi o'tish ip ichidagi kod uchun parallelizm illyuziyasini yaratadi.
  • Holatni saqlash: Fiber yield chaqirilganda o'z holatini (mahalliy o'zgaruvchilar, bajarilish nuqtasi) eslaydi va resume chaqirilganda davom ettiradi.

Fiberning qo'llanilishi:

  • Asinxron kodni amalga oshirish: CallBacklar yoki murakkab tuzilmalar ishlatmasdan bloklamaydigan operatsiyalarni modellash.
  • Iteratsiya va generatorlar: Talabga binoan qiymatlarni ishlab chiqaradigan murakkab iteratorlar yaratish.
  • Yakuniy avtomatlar bilan ishlash: Holatlarni va o'tishlarni aniq modellash.

Misol:

# Fiber yaratish
fiber = Fiber.new do
  puts "Fiber 1 dan salom"
  value1 = Fiber.yield(1) # Bajarishni to'xtatadi, 1 ni qaytaradi
  puts "Fiber 1 dan qabul qilindi: #{value1}"

  puts "Fiber 2 dan salom"
  value2 = Fiber.yield(2) # Bajarishni to'xtatadi, 2 ni qaytaradi
  puts "Fiber 2 dan qabul qilindi: #{value2}"

  puts "Fiber 3 dan salom"
  3 # Fiberni yakunlaydi, 3 ni qaytaradi
end

puts "Asosiy: Birinchi resume'dan oldin"
result1 = fiber.resume # Fiberni davom ettirish
puts "Asosiy: Fiberdan olingan: #{result1}"

puts "Asosiy: Ikkinchi resume'dan oldin"
result2 = fiber.resume("Main 1 dan") # Davom ettirish va qiymat yuborish
puts "Asosiy: Fiberdan olingan: #{result2}"

puts "Asosiy: Uchinchi resume'dan oldin"
result3 = fiber.resume("Main 2 dan") # Davom ettirish va qiymat yuborish
puts "Asosiy: Fiberdan olingan: #{result3}"

Asosiy metodlar:

  • Fiber.new { ... }: Yangi Fiber yaratadi. Kod bloki birinchi resume chaqirilganda bajariladi.
  • fiber.resume(*args): Fiberni davom ettiradi. resumega yuborilgan argumentlar Fiber.yield ning qaytish qiymati yoki boshlovchi blok argumentlari bo'ladi.
  • Fiber.yield(*args): Joriy Fiberni to'xtatadi va boshqarishni uni ishga tushirgan kodga qaytaradi (resume). yieldga yuborilgan argumentlar resume ning qaytish qiymati bo'ladi.
  • Fiber.current: Joriy Fiberni qaytaradi.

Fiber va Thread o'rtasidagi farqlar:

Xususiyat Fiber Thread
Rejalashtirish Hamkorlikda (aniq o'tish) Oldindan to'xtatiladigan (OS tomonidan boshqariladi)
Resurslar Yengil (kam resurslar) Og'ir (ko'proq resurslar)
Parallelizm Yolg'on parallelizm bitta ipda Haqiqiy parallelizm (CPU yadro ishlatadi)
Muloqot yield va resume orqali Umumiy xotira, xabarlar va boshqalar orqali
Debug qilish Nisbatan oddiy (satr oqimi) Murakkab (yugurish, blokirovkalar)

Fiberlar, Thread bilan solishtirganda, pastroq darajadagi bajarish nazorat mexanizmini taqdim etadi, ammo aniq boshqarishni talab qiladi.