Sobes.tech
Middle+

Yashil iplar (green threads) nima?

sobes.tech AI

AIdan javob

Yashil iplar foydalanuvchi maydoni darajasida boshqariladi, operatsion tizim darajasida emas. Ular OS ipliklariga to'g'ridan-to'g'ri ko'rsatilmaydi. Yashil iplar orasida rejalashtirish va kontekst almashinuvi dasturlash tilining ish vaqtida yoki maxsus kutubxona yordamida amalga oshiriladi.

Asosiy xususiyatlar:

  • Boshqaruv: To'liq ish vaqtida amalga oshiriladi.
  • Resurslar: Yashil iplar OS ning nativ ipliklariga qaraganda kamroq resurs (xotira va CPU vaqti) talab qiladi.
  • Rejalashtirish: To'xtovsiz (hamkorlik bilan ko'p vazifali). Boshqa yashil ipga bajarilishi uchun iplik aniq ravishda nazoratni topshirishi kerak.
  • Parallellik: To'xtovsiz rejalashtirish va foydalanuvchi maydonida boshqarish sababli, yashil iplar qo'shimcha mexanizmlar (masalan, bir nechta jarayonlardan foydalanish, har biri o'z yashil iplariga ega) bo'lmagan holda ko'p yadroli protsessorlarda aniq parallel bajarishni qo'llab-quvvatlamaydi.

Rubyda, ayniqsa eski versiyalarda (1.9 dan oldin) va MRI (Matz's Ruby Interpreter) bilan, yashil iplar ishlatilgan. Bu ko'p yadroli tizimlarda ishlash muammolariga olib kelgan, chunki faqat bitta yashil ip har doim bajarilishi mumkin edi, Global Interpreter Lock (GIL) bilan bloklangan. MRI ning yangi versiyalarida va alternativ amalga oshirishlarda (JRuby, Rubinius) nativ OS ipliklari ishlatiladi.

# Ruby'da ipliklardan foydalanish misoli (versiya va amalga oshirishga qarab, yashil yoki nativ bo'lishi mumkin)
t1 = Thread.new do
  puts "Iplik 1 boshlanmoqda"
  sleep(1)
  puts "Iplik 1 tugadi"
end

t2 = Thread.new do
  puts "Iplik 2 boshlanmoqda"
  sleep(1)
  puts "Iplik 2 tugadi"
end

t1.join # t1 ipligini yakunlashni kutadi
t2.join # t2 ipligini yakunlashni kutadi

puts "Barcha ipliklar tugadi"

Yashil va nativ ipliklar taqqoslamasi:

Xususiyat Yashil ipliklar Nativ OS ipliklari
Boshqaruv Foydalanuvchi maydoni Operatsion tizim yadrosi
Yaratish/Tezlik Arzonroq Qimmatroq
Rejalashtirish Hamkorlik bilan (to'xtovsiz emas) To'xtovsiz
Parallellik Cheklangan (bir CPU) mexanizmsiz To'liq (bir nechta CPU)
Bloklovchi chaqiriqlar Butun interpretator/jarayonni bloklaydi Faqat joriy nativ iplikni bloklaydi

Zamonaviy Ruby kontekstida (1.9 va undan keyingi MRI bilan), Thread ipliklari nativ OS ipliklaridir. Yashil ipliklar, asosiy paralelizm modeli sifatida, MRI da hozirda kamdan-kam uchraydi, ammo maxsus kutubxonalar yoki alternativ ish vaqtlarida uchrashi mumkin.