Таврҳои сабз (green threads) чистанд?
sobes.tech AI
Ҷавоб аз AI
رشتههای سبز، رشتههایی هستند که در سطح فضای کاربر کنترل میشوند، نه سیستمعامل. آنها مستقیماً در رشتههای سیستمعامل نمایش داده نمیشوند. برنامهریزی و تعویض زمینه بین رشتههای سبز توسط زمان اجرا زبان برنامهنویسی یا کتابخانه خاص انجام میشود.
ویژگیهای اصلی:
- مدیریت: کاملاً توسط زمان اجرا انجام میشود.
- منابع: نسبت به رشتههای بومی سیستمعامل برای ایجاد و تعویض، منابع سیستم کمتری مصرف میکنند (حافظه و زمان CPU).
- برنامهریزی: همکاری (multitasking همکاری). رشته باید صراحتاً مدیریت را واگذار کند تا رشته سبز دیگری بتواند اجرا شود.
- همزمانی: به دلیل برنامهریزی و مدیریت غیرمستقیم در فضای کاربر، رشتههای سبز به طور صریح از اجرای همزمان بر روی چند هسته پردازنده بدون مکانیزمهای اضافی (مثلاً استفاده از چند فرآیند، هر کدام با رشتههای سبز خود) پشتیبانی نمیکنند.
در Ruby، به ویژه در نسخههای قدیمیتر (قبل از 1.9) و با MRI (مفسر Ruby مارتز)، رشتههای سبز استفاده میشدند. این منجر به مشکلات عملکرد در سیستمهای چند هستهای شد، زیرا تنها یک رشته سبز در هر زمان میتوانست اجرا شود، که توسط قفل مفسر جهانی (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 نادر هستند، اما ممکن است در کتابخانههای خاص یا محیطهای اجرای جایگزین یافت شوند.