🟩 اندر احوالات Green Threads در نرم‌افزار

🟩 اندر احوالات Green Threads در نرم‌افزار


تردها و انواعشون

تردها (Threads) واحدهای اجرای کد هستن که می‌تونن به‌صورت هم‌زمان یا به‌توالی روی پردازنده اجرا بشن. این کار باعث می‌شه برنامه‌ها بتونن چندین کار رو به‌طور موازی انجام بدن. حالا تردها دو نوع کلی دارن:


⚙️ تردهای سیستم‌عاملی (Kernel Threads):

این تردها توسط سیستم‌عامل مدیریت می‌شن و هر ترد یک بخش از CPU و منابع سیستم رو به خودش اختصاص می‌ده. این تردها می‌تونن به‌طور هم‌زمان روی چندین هسته پردازنده اجرا بشن و از چند هسته CPU استفاده کنن، به همین خاطر توی پردازش‌های سنگین و چند هسته‌ای خیلی کاربردی می‌شن.


🌱 گرین تردها (Green Threads):

این نوع تردها در سطح برنامه و توسط خود برنامه یا یک کتابخونه مدیریت می‌شن و به سیستم‌عامل متکی نیستن. در واقع، این تردها همگی داخل یک ترد سیستم‌عاملی اجرا می‌شن، و به همین خاطر وزن کمتری دارن و منابع کمتری مصرف می‌کنن. اما چون به یک ترد سیستم‌عاملی وابسته هستن، نمی‌تونن هم‌زمان روی چندین هسته اجرا بشن.


————————-


🫧 گرین تردها توی چه زبان‌ها و تکنولوژی‌هایی استفاده می‌شن؟


▫️گو (Go): گرچه دقیقاً به اون‌ها گرین ترد نمی‌گن، ولی گوروتین‌ها توی Go توسط رانتایم Go مدیریت می‌شن و خیلی سبک و انعطاف‌پذیرن (یکی از نقطه‌قوت‌های گو که من رو جذب کرد همین پرفرمنس عالی گرین‌تردینگ در گو بود، عملا همه چیز گرین‌ترد است).


▫️جاوا: نسخه‌های اولیه جاوا از گرین تردها استفاده می‌کردن، چون این تردها پرتابل بودن. ولی جاوا بعدها به‌خاطر محدودیت‌های گرین تردها به سمت تردهای سیستم‌عاملی رفت.


▫️پایتون: تردهای پیش‌فرض پایتون وابسته به سیستم‌عامل هستن، کتابخونه‌هایی مثل Gevent و Greenlet به پایتون اجازه می‌دن تا رفتار مشابهی با گرین تردها داشته باشه.


▫️روبی: برخی نسخه‌های روبی، مثل JRuby، از گرین تردها پشتیبانی می‌کنن.


▫️ارلنگ (Erlang): پردازش‌های ارلنگ هم مشابه گرین تردها عمل می‌کنن و مدیریت اون‌ها داخل محیط اجرایی این زبان انجام می‌شه.


▫️دات‌نت (NET.)

توی NET.، گرین تردها به‌طور پیش‌فرض وجود ندارن (در مورد نسخه ۹ توضیح مبسوطی توی کامنت خواهم نوشت) چون این فریم‌ورک بیشتر روی تردهای سیستم‌عاملی تکیه داره. ولی چند امکان مهم داره که ویژگی‌های مشابهی رو فراهم می‌کنن:


- Async/Await و الگوی Task-Based Asynchronous Pattern (TAP)

- پورت‌های کامل I/O: این ویژگی، مخصوصاً روی ویندوز، برای مدیریت بهینه عملیات I/O به کار می‌ره و بدون ایجاد چندین ترد، امکان هم‌زمانی رو فراهم می‌کنه.

- کتابخانه‌های شخص ثالث: توی NET. یه سری کتابخونه وجود داره که سعی می‌کنن قابلیت مشابه Fiber رو ایجاد کنن، ولی خیلی خوب نیستن جدی‌شون نگیرید 😁

به‌طور کلی، .NET از تردهای سبکی مثل گرین تردها پشتیبانی نمی‌کنه، ولی با ابزارهایی مثل async/await و Thread Pool می‌تونین به نتایج مشابهی برسین!


————————


💡 استفاده‌ گرین تردها چیه؟


💎 اپلیکیشن‌های I/O محور: گرین تردها برای برنامه‌هایی که بار زیادی از عملیات ورودی و خروجی دارن، خیلی مناسبه، مثل برنامه‌هایی که اغلب منتظر دریافت داده از شبکه یا دیسک هستن.


💎 تعداد بالای عملیات هم‌زمان با مصرف کم منابع: زمانی که یه اپلیکیشن باید تعداد زیادی عملیات هم‌زمان رو مدیریت کنه ولی به قدرت پردازش بالا نیاز نداره، گرین تردها خیلی مفیدن چون سبک هستن و منابع کمی می‌گیرن.


💎 محیط‌های تک هسته‌ای: اگه یه برنامه روی سیستم تک‌هسته‌ای اجرا بشه، گرین تردها می‌تونن بدون نیاز به سربار تردهای سیستم‌عاملی، هم‌زمانی موثری رو فراهم کنن.


💬 نظر، تجربه، بحث، خوشحال می‌شم توی کامنت بنویسید...