ویرگول
ورودثبت نام
Roham
Rohamپیدا کردن خودم توی نوشته ها برام جذابه بهم یه حس خوب بودن می ده مخصوصا وقتی با طعم علم و خلاقیت همراه باشه هر روز که بیشتر با این دنیا آشنا می شم حس بهتری برای بیشتر دونستن و یاد دادن درونم رشد می کنه
Roham
Roham
خواندن ۳ دقیقه·۲ روز پیش

Green Tea GC: نسل جدید جمع‌کننده زباله در زبان Go

Green Tea Garbage Collector
Green Tea Garbage Collector

در اکتبر ۲۰۲۵، تیم توسعه Go قابلیت جدیدی به نام Green Tea Garbage Collector را معرفی کرد که به‌عنوان یک سیستم جمع‌آوری زباله (GC) آزمایشی در نسخهٔ Go 1.25 قابل استفاده است. این به‌روزرسانی می‌تواند نحوهٔ مدیریت حافظه در برنامه‌های Go را به‌طور قابل‌توجهی بهبود دهد و مسیر زبان را به سمت کارایی بالاتر در آینده ترسیم کند.


چرا به Garbage Collector نیاز داریم؟

در هر برنامه‌ای که از حافظهٔ heap استفاده می‌کند، مشخص کردن زمان آزاد کردن حافظه‌ای که دیگر استفاده نمی‌شود، یکی از مهم‌ترین چالش‌هاست. در Go، این کار به‌صورت خودکار توسط GC انجام می‌شود تا توسعه‌دهنده مجبور به مدیریت دستی حافظه نباشد.

قبلاً Go از الگوریتم «mark-and-sweep» مبتنی بر اشاره‌گرها (tri-color) استفاده می‌کرد که هم‌زمان با اجرای برنامه فعالیت می‌کرد و سعی داشت زمان «pause» (توقف) را به حداقل برساند.


Green Tea GC چیست؟

Green Tea GC یک پیاده‌سازی جدید و آزمایشی برای جمع‌آوری زباله در Go است که روی کارایی، مقیاس‌پذیری و استفادهٔ بهتر از معماری حافظهٔ مدرن تمرکز دارد. در این روش، به‌جای اسکن تک‌تک اشیاء در heap، واحد اسکن به «spans» (بلاک‌های حافظه) تغییر می‌کند.

span: بلوکی از حافظه که چندین شیء هم‌اندازه را در خود جای می‌دهد و واحد اساسی مدیریت حافظهٔ Go است.


چگونه Green Tea کار می‌کند؟

الگوریتم جدید به‌جای دنبال کردن اشاره‌گرها از شیء به شیء، کل spanها را به‌عنوان واحد کاری در نظر می‌گیرد. این رویکرد چند مزیت مهم دارد:

۱. بهبود کارایی استفاده از cache

پردازش کل span باعث می‌شود حافظه‌هایی که در نزدیکی هم هستند در cache پردازنده بارگذاری شوند، در نتیجه تعداد cache missها کاهش می‌یابد و عمل اسکن حافظه سریع‌تر می‌شود.

۲. کاهش هم‌زمانی و هماهنگی بین threadها

به جای کار با اشیاء پراکنده، کار روی spans به threadها اجازه می‌دهد کارهای بزرگ‌تر و منسجم‌تری انجام دهند، که این موضوع میزان هماهنگی (synchronization) بین threadها را کمتر می‌کند.

۳. بهبود مصرف CPU

در اغلب تست ها، Green Tea توانسته بین ۱۰٪ تا ۴۰٪ مصرف CPU مرتبط با GC را کاهش دهد — در نتیجه برنامه‌ها زمان کمتری را در GC صرف می‌کنند.


نتایج واقعی

تست‌های اولیه نشان داده‌اند که:

  • در بسیاری از برنامه‌ها، GC کمتر از گذشته CPU را درگیر می‌کند.

  • در برخی سناریوها بهبودها چشم‌گیر است، اما در workloadهایی که اشیاء پراکنده‌اند ممکن است تأثیر کمتری مشاهده شود.


مزایا و معایب Green Tea

نقاط قوت

✔ کاهش مصرف CPU در GC
✔ بهتر شدن locality حافظه و عملکرد cache
✔ آماده شدن برای استفاده در معماری‌های multi-core مدرن

محدودیت‌ها

این قابلیت هنوز آزمایشی است و برای برخی برنامه‌ها ممکن است تأثیر کمی داشته باشد.
تا زمانی که به‌عنوان گلوبال در نسخه‌های پایدار به‌کار نرود، نیاز به ارزیابی دقیق برای استفادهٔ در پرداکشن دارد.


چگونه آن را امتحان کنیم؟

برای استفاده از Green Tea در پروژهٔ خود، کافیست هنگام کامپایل Go از متغیر محیطی زیر استفاده کنید:

GOEXPERIMENT=greenteagc go build

بدون نیاز به تغییر در کد برنامه.


جمع‌بندی

Green Tea GC نشان‌دهندهٔ یک جهش بزرگ در مدیریت حافظهٔ Go است. با تمرکز بر طراحی موازی، بهینه‌سازی cache و کاهش سربار GC، این قابلیت می‌تواند راهنما و پیش‌درآمدی برای آیندهٔ Go باشد. اگر شما هم با برنامه‌های بزرگ، سیستم‌های توزیع‌شده یا workloadهای پر حافظه کار می‌کنید، Green Tea می‌تواند اجرای برنامه‌ها را روان‌تر و سریع‌تر کند — هر چند باید قبل از استفادهٔ در پرداکشن آن را به‌خوبی آزمایش کنید.

go
۰
۰
Roham
Roham
پیدا کردن خودم توی نوشته ها برام جذابه بهم یه حس خوب بودن می ده مخصوصا وقتی با طعم علم و خلاقیت همراه باشه هر روز که بیشتر با این دنیا آشنا می شم حس بهتری برای بیشتر دونستن و یاد دادن درونم رشد می کنه
شاید از این پست‌ها خوشتان بیاید