რა არის მწვანე ძაფები (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-ტაიმებში.