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 და ალტერნატიული რეალიზაციებით (JRuby, Rubinius) გამოიყენება ნატურალური ოპერაციული სისტემის თხელები.

# მაგალითი 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 "ყველა თხელი დასრულდა"

მწვანე და ნატურალური თხელების შედარება:

მახასიათებელი მწვანე თხელები ნატურალური ოპერაციული სისტემის თხელები
მართვა მომხმარებლის სივრცე ოპერაციული სისტემის ბირთვი
შექმნა/გადაცემა იაფი ძვირი
გეგმვა კოოპერატიული (თანამშრომლობითი) წინასწარ განსაზღვრული
პარალელიზმი შეზღუდული (ერთი CPU) გარეშე მექანიზმები სრული (მრავალი CPU)
ბლოკირებადი ზარები ბლოკავს მთელ ინტერპრეტატორს/პროცესს ბლოკავს მხოლოდ მიმდინარე ნატურალურ თხელს

მოდერნულ Ruby-ში (1.9 და ზევით MRI) სტანდარტული Thread ნატურალური ოპერაციული სისტემის თხელები არიან. მწვანე თხელები, როგორც მთავარი პარალელიზმის მოდელი, ახლა იშვიათია MRI-ში, მაგრამ შეიძლება შეხვდეთ სპეციფიკურ ბიბლიოთეკებში ან ალტერნატიულ run-ტაიმებში.