Ի՞նչ են կանաչ թելերը (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-ժամանակներում։