Sobes.tech
Middle+

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.