📘 Span Set در Go Runtime
🔹 برای مدیریت بهتر spanها، Go از ساختاری به نام Span Set استفاده میکند.
🔹 هر Span Set شامل مجموعهای از mspan**هایی است که همگی متعلق به **یک Span Class مشخص هستند
🧩 ساختار درونی Span Set
* از نظر فنی، Span Set یک slice از آرایهها است.
* اندازهی هر آرایه 512 خانه دارد.
* هر خانه شامل یک mspan object است (ممکن است null باشد).
* سلولهای بنفش → mspan معتبر (non-null)
* سلولهای سفید → تهی (null)
⚙️ عملیات (Push / Pop)
* دو متغیر کلیدی دارد: head و tail
*
head → اولین span معتبر (برای pop)*
tail → آخرین span معتبر (برای push)* هنگام pop از head شروع میکند (بالا به پایین، چپ به راست).
* هنگام push از tail ادامه میدهد (بالا به پایین، چپ به راست).
* اگر آرایهای خالی شود، حذف شده و به pool آزاد برای استفادهی آینده برگردانده میشود.
🧵 همزمانی (Concurrency)
* متغیرهای
head و tail atomic هستند.* به همین دلیل، چند goroutine میتوانند همزمان span اضافه یا حذف کنند
بدون نیاز به قفل (lock).
---
✅ خلاصه:
اSpan Set در Go ابزاری کارآمد برای نگهداری و مدیریت همزمان مجموعهای از spanهاست.این ساختار ساده اما قدرتمند، به runtime اجازه میدهد تا مدیریت حافظه را سریع، بدون قفل و با حداقل سربار انجام دهد.
➖➖➖➖➖➖➖➖
👑 @gopher_academy