Middle+
Rubyдеги Fiber эмне?
sobes.tech AI
AIден жооп
Ruby-да Fiber — бул жеңил иштөө агымы (корутина), ал көптөгөн параллел иштөө агымдарын бир процесстин / операциялык тутумдун бир тишинде түзүүгө мүмкүндүк берет. Бул коддун аткаруу тартибин башкарууга жана ОС планировчусунун катышуусуз Fiber арасында которууга мүмкүндүк берет.
Fiberдин негизги өзгөчөлүктөрү:
- Кооперативдүү пландоо: Fiber-лер алдын ала операциялык тутумдун ядросу тарабынан үзгүлтүккө учурабайт. Алардын ортосунда которуу
resumeжанаyieldыкмалары аркылуу ачык-айкын жүргүзүлөт. - Бир тиштүү: Бардык Fiber-лер бир тиште кезектешип иштейт, бирок алардын ортосунда которуу тиштеги код үчүн параллелизм иллюзиясын түзөт.
- Күйдүн сакталуусу: Fiber
yieldчакырылышында өзүнүн абалын (жергиликтүү өзгөрмөлөр, аткаруу чекити) эстейт жанаresumeчакырылышында кайра калыбына келтирет.
Fiberдин колдонулушу:
- Асинхрон кодду ишке ашыруу: Блоктоочу эмес операцияларды моделдөө, callbackтер же кыйын структураларды колдонбостон.
- Итераторлор жана генераторлор: Талапка ылайык маанилерди жараткан кыйын итераторлорду түзүү.
- Аягына жеткен автоматтарды иштетүү: Күйдөрдү жана өтүүлөрдү ачык моделдөө.
Колдонуу мисалы:
# Fiber түзүү
fiber = Fiber.new do
puts "Салам, Fiber 1ден"
value1 = Fiber.yield(1) # Ишти токтотуу, 1 кайтаруу
puts "Fiber 1ден алынган: #{value1}"
puts "Салам, Fiber 2ден"
value2 = Fiber.yield(2) # Ишти токтотуу, 2 кайтаруу
puts "Fiber 2ден алынган: #{value2}"
puts "Салам, Fiber 3ден"
3 # Fiber аяктоо, 3 кайтаруу
end
puts "Негизги: Биринчи `resume` алдында"
result1 = fiber.resume # Fiberди калыбына келтирүү
puts "Негизги: Fiberден алынган: #{result1}"
puts "Негизги: Экинчи `resume` алдында"
result2 = fiber.resume("Негизги 1ден") # калыбына келтирүү жана маанини өткөрүү
puts "Негизги: Fiberден алынган: #{result2}"
puts "Негизги: Үчүнчү `resume` алдында"
result3 = fiber.resume("Негизги 2ден") # калыбына келтирүү жана маанини өткөрүү
puts "Негизги: Fiberден алынган: #{result3}"
Негизги ыкмалар:
Fiber.new { ... }: Жаңы Fiber түзөт. Блок биринчиresumeчакырылышында ишке кирет.fiber.resume(*args): Fiberди калыбына келтирет.resume-га өткөрүлгөн аргументтерFiber.yield-ден кайтарылуучу маанилер же баштапкы блоктун аргументтери болот.Fiber.yield(*args): Учурдагы Fiberди токтотуп, башкарууну аны иштеткен кодго кайтарат (resume).yield-га өткөрүлгөн аргументтерresume-ден кайтарылуучу маанилер болот.Fiber.current: Учурдагы Fiberди кайтарат.
Fiber менен Thread ортосундагы айырмачылык:
| Өзгөчөлүк | Fiber | Thread |
|---|---|---|
| Пландоо | Кооперативдүү (ачык которуу) | Предптив (автоматтык, ОС тарабынан башкарылат) |
| Ресурстар | Жеңил (аз ресурстар) | Көбүрөөк ресурстар) |
| Параллелизм | Жасалма параллелизм бир тиште | Чын параллелизм (CPU ядролорун колдонуу) |
| Байланыш | yield жана resume аркылуу |
Жалпы эс тутум, билдирүү өткөрүү жана башка |
| Аралашуу | Жакшыраак жеңил (сызыктуу агым) | Кыйын (деректердин жарышы, блоктоолор) |
Fiber-лер Thread-ке салыштырмалуу төмөнкү деңгээлдеги башкаруу механизмин камсыз кылат жана ачык которууларды талап кылат.