Yaşıl ipliklər (green threads) nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Yaşıl ipliklər istifadəçi sahəsi səviyyəsində idarə olunan ipliklərdir, əməliyyat sisteminin səviyyəsində deyil. Onlar birbaşa OS iplikləri kimi göstərilmir. Yaşıl ipliklər arasında planlaşdırma və kontekst dəyişdirmə proqramlaşdırma dilinin işləmə vaxtında və ya xüsusi kitabxana vasitəsilə həyata keçirilir.
Əsas xüsusiyyətlər:
- İdarəetmə: Tamamilə işləmə vaxtında həyata keçirilir.
- Resurslar: Yaradılması və keçidi üçün əməliyyat sistemi yerli ipliklərinə nisbətən daha az resurs (yaddaş və CPU vaxtı) tələb edir.
- Planlaşdırma: Dayanıqsız (kooperativ çoxlu tapşırıq). İplik açıq şəkildə idarəni təhvil verməlidir ki, başqa yaşıl iplik icra oluna bilsin.
- Paralellik: Dayanıqsız planlaşdırma və istifadəçi sahəsində idarəetmə səbəbindən, yaşıl ipliklər əlavə mexanizmlər olmadan çox nüvəli prosessorlarda paralel icra dəstəkləmir (məsələn, çox proses istifadə etmək, hər biri öz yaşıl iplikləri ilə).
Ruby-də, xüsusən köhnə versiyalarda (1.9-dan əvvəl) və MRI (Matz's Ruby Interpreter) ilə, yaşıl ipliklər istifadə olunurdu. Bu, çox nüvəli sistemlərdə performans problemlərinə səbəb olurdu, çünki yalnız bir yaşıl iplik hər zaman işləyə bilərdi, Global Interpreter Lock (GIL) tərəfindən bloklanmışdır. MRI-nin daha yeni versiyalarında və alternativ implementasiyalarda (JRuby, Rubinius) nativ OS iplikləri istifadə olunur.
# Ruby-də ipliklərin istifadəsi nümunəsi (versiya və implementasiyaya görə, yaşıl və ya nativ ola bilər)
t1 = Thread.new do
puts "İplik 1 başladı"
sleep(1)
puts "İplik 1 bitdi"
end
t2 = Thread.new do
puts "İplik 2 başladı"
sleep(1)
puts "İplik 2 bitdi"
end
t1.join # t1 ipliyinin tamamlanmasını gözləyir
t2.join # t2 ipliyinin tamamlanmasını gözləyir
puts "Bütün ipliklər tamamlandı"
Yaşıl və nativ ipliklərin müqayisəsi:
| Xüsusiyyət | Yaşıl ipliklər | Nativ OS iplikləri |
|---|---|---|
| İdarəetmə | İstifadəçi sahəsi | Əməliyyat sistemi nüvəsi |
| Yaradılması/Keçid | Daha ucuz | Daha bahalı |
| Planlaşdırma | Kooperativ (dayanıqsız) | Dayanıqsız |
| Paralelizm | Məhdud (bir CPU) mexanizmlərsiz | Tam (bir neçə CPU) |
| Bloklayan çağırışlar | Bütün interpretator/proses bloklayır | Yalnız cari nativ iplik bloklayır |
Müasir Ruby kontekstində (1.9 və yuxarı MRI ilə), Thread iplikləri nativ OS iplikləridir. Yaşıl ipliklər, əsas paralelizm modeli kimi, MRI-də indi nadir hallarda istifadə olunur, lakin xüsusi kitabxanalarda və ya alternativ runtime-lərdə rast gəlinə bilər.