Sobes.tech
Middle+

Ի՞նչ են կանաչ թելերը (green threads):

sobes.tech AI

Պատասխան AI-ից

կանաչ թելերը — դա թելեր են, որոնք կառավարում են օգտագործողի տարածքի մակարդակում, ոչ թե օպերացիոն համակարգի մակարդակում: Դրանք անմիջապես չեն ցուցադրվում օպերացիոն համակարգի թելերի վրա: պլանավորումը և կոնտեքստի փոխարկումը կանաչ թելերի միջև կատարվում է ծրագրավորման լեզվի run-ժամանակ կամ հատուկ գրադարանի կողմից:

Հիմնական հատկանիշները՝

  • Կառավարում: լրիվապես կատարվում է run-ժամանակով:
  • Ռեսուրսներ: պահանջում է քիչ համակարգային ռեսուրսներ (հիշողություն և CPU ժամանակ)՝ համեմատած օպերացիոն համակարգի բնիկ թելերի հետ՝ ստեղծելու և փոխելու համար:
  • Պլանավորում: համագործակցային (cooperative multitasking): Թելն պետք է ակնհայտորեն հանձնի կառավարումը, որպեսզի մյուս կանաչ թելը կարողանա կատարվել:
  • Համաժամանակություն: Հաշվի առնելով համագործակցային պլանավորումը և կառավարման օգտագործողի տարածքում, կանաչ թելերը բացարձակապես չեն աջակցում բազմակողմանի կատարմանը բազմակողմանի պրոցեսորների վրա առանց լրացուցիչ մեխանիզմների (օրինակ՝ օգտագործելով մի քանի պրոցեսներ, յուրաքանչյուրը իր կանաչ թելերով):

Ruby-ում, հատկապես հին տարբերակներում (մինչև 1.9) և MRI (Matz-ի Ruby Interpreter)-ով, օգտագործվում էին կանաչ թելեր: Դա հանգեցրեց արդյունավետության խնդիրների բազմակողմանի համակարգերում, քանի որ միայն մեկ կանաչ թել կարող էր կատարվել ցանկացած ժամանակ, փակված Global Interpreter Lock (GIL)-ով: Ավելի նոր տարբերակներում MRI և այլընտրանքային իրականացման մեջ օգտագործվում են բնիկ օպերացիոն համակարգի թելեր:

# Օրինակ՝ Ruby-ում թելերի օգտագործում (վերաբերում է տարբերակին և իրականացմանը, կարող են լինել կանաչ կամ բնիկ)
t1 = Thread.new do
  puts "Թել 1 սկսվեց"
  sleep(1)
  puts "Թել 1 ավարտվեց"
end

t2 = Thread.new do
  puts "Թել 2 սկսվեց"
  sleep(1)
  puts "Թել 2 ավարտվեց"
end

t1.join # սպասում է t1 թելին ավարտին

t2.join # սպասում է t2 թելին ավարտին

puts "Բոլոր թելերը ավարտվեցին"

Կանաչ և բնիկ թելերի համեմատություն՝

հատկանիշներ Կանաչ թելեր Բնիկ օպերացիոն համակարգի թելեր
Կառավարում Օգտագործողի տարածք Հիմք օպերացիոն համակարգի
Ստեղծում/փոխանցում Ավելի էժան Ավելի թանկ
Պլանավորում Համագործակցային (cooperative) Նախատեսված
Համաժամանակություն սահմանափակ (մեկ CPU) առանց մեխանիզմների լրիվ (շատ CPU)
Բլոկող կանչեր Բլոկավորում է ամբողջ ինտերպրետատորը/գործընթացը Բլոկավորում է միայն ընթացիկ բնիկ թելը

Ավելի արդի Ruby-ում (1.9-ից և բարձր MRI), ստանդարտ Thread թելերը բնիկ օպերացիոն համակարգի թելեր են: Կանաչ թելերը, որպես հիմնական մոդել՝ համաժամանակության, այժմ հազվադեպ են MRI-ում, բայց կարող են հանդիպել հատուկ գրադարաններում կամ այլընտրանքային run-ժամանակներում։