Gopher Academy
3.33K subscribers
923 photos
40 videos
280 files
2.07K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
Gopher Academy
📌 Memory Allocation in Go 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction 🔴 https://t.iss.one/gopher_academy/4231…
🔹 Introduction – Memory Allocation in Go


مدیریت حافظه بخش حیاتی هر زبان برنامه‌نویسی است و Go هم از این قاعده مستثنی نیست. سرعت و کارایی برنامه‌های Go به شدت وابسته به نحوه تخصیص و مدیریت حافظه است.

هرچند Go با APIهای ساده‌ای مثل new(T), &T{} و make پیچیدگی‌ها را از دید برنامه‌نویس پنهان می‌کند، اما درک سازوکار پشت پرده به ما کمک می‌کند:

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

در این سری قرار است:

* با اجزای اصلی memory allocator در Go آشنا شویم،
* نحوه مدیریت حافظه برای اشیاء کوچک، متوسط و بزرگ را ببینیم،
* مدیریت stack در کنار heap را بررسی کنیم،
* و در نهایت با مطالعه case studyها**، تأثیر عملی این استراتژی‌ها را در برنامه‌های واقعی درک کنیم.

قبل از ورود به جزئیات، بهتر است مفاهیم پایه‌ای **Virtual Memory
در سیستم‌عامل مرور شود.


👑 @gopher_academy
1
Gopher Academy
📌 Memory Allocation in Go 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction 🔴 https://t.iss.one/gopher_academy/4231…
🔹 Go’s View of Virtual Memory


یک برنامه Go در اصل یک پردازش فضای کاربر (user-space process) است و همان چیدمان استاندارد حافظه مجازی (Stack, Heap, BSS, Data) را دارد.

در Stack، Go از استک خاصی به نام g0 stack استفاده می‌کند که به نخ اصلی runtime (m0) متصل است.

متغیرهای global که مقدار اولیه دارند در بخش Data ذخیره می‌شوند، و متغیرهای global بدون مقدار اولیه در بخش BSS قرار می‌گیرند.

بر خلاف زبان‌های سنتی مثل C که از Heap زیر program break استفاده می‌کنند، Go این Heap سنتی را برای اشیای خود به کار نمی‌برد.

به جای آن، Go برای تخصیص حافظه اشیای heap و استک گوروتین‌ها از memory-mapped segments استفاده می‌کند.

از اینجا به بعد، وقتی از "heap" در Go صحبت می‌کنیم، منظور همان بخش memory-mapped است (و نه heap سنتی زیر program break).

👉 به زبان ساده: Go یک heap اختصاصی روی memory-mapped segments می‌سازد و مدیریت حافظه را خودش انجام می‌دهد، نه اینکه از heap پیش‌فرض سیستم عامل استفاده کند.


👑 @gopher_academy
1🔥1
Gopher Academy
📌 Memory Allocation in Go 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go می‌پردازیم. درک درست از ساختار حافظه به شما کمک می‌کند عملکرد برنامه‌هایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction 🔴 https://t.iss.one/gopher_academy/4231…
برای مدیریت بهینه‌ی حافظه، Go حافظه‌ی تخصیص‌داده‌شده از طریق memory mapping را به واحدهای سلسله‌مراتبی تقسیم می‌کند:

ساختار حافظه:

Arena (۶۴MB)

بزرگ‌ترین واحد تخصیص در Go.

هر Arena فضایی به اندازه‌ی ثابت ۶۴MB دارد.

اGo سعی می‌کند Arenaها رو پشت‌سر هم قرار بده، ولی همیشه تضمین نمی‌شه (به خاطر رفتار mmap).

Page (۸KB)

هر Arena به صفحات (Page) تقسیم می‌شود.
سایز هر Page: ۸KB.
این Pageها با Pageهای سیستم‌عامل (معمولاً ۴KB) متفاوت هستند.
تخصیص اشیاء:
اگر اندازه‌ی شیء کوچک‌تر از ۸KB باشد → چندین شیء در یک Page جا می‌گیرند.

اگر اندازه‌ی شیء دقیقاً ۸KB باشد → کل Page را اشغال می‌کند.
اگر اندازه‌ی شیء بزرگ‌تر از ۸KB باشد → روی چند Page گسترده می‌شود.

اGoroutine Stack
استک هر goroutine در همین Pageها نگهداری می‌شود.
هر استک در ابتدا فقط ۲KB است.
بنابراین یک Page (۸KB) می‌تواند تا ۴ goroutine stack را در خود جا دهد.

به زبان ساده:
اGo حافظه را اول به Arena (۶۴MB) تقسیم می‌کند، سپس هر Arena را به Page (۸KB) می‌شکند و این Pageها برای اشیاء مختلف یا استک goroutineها استفاده می‌شوند.

👑 @gopher_academy
1👍1🏆1
🔵 عنوان مقاله
GoMLX: An Accelerated Machine Learning Framework for Go

🟢 خلاصه مقاله:
اGoMLX یک مجموعه کتابخانه و ابزار یادگیری ماشین برای زبان Go است که با تمرکز بر اجرای شتاب‌گرفته و تجربه‌ای سازگار با اکوسیستم Go ارائه می‌شود. این پروژه عملاً نقش جایگزینی برای PyTorch یا TensorFlow در دنیای Go را بازی می‌کند و ساخت مدل، آموزش، پردازش داده و استنتاج را با APIهای ساده و ایدئوماتیک Go ممکن می‌سازد. با وجود نام مشابه، هیچ ارتباطی با MLX از Apple ندارد و در حال حاضر فقط روی Linux قابل استفاده است؛ انتخابی که آن را برای محیط‌های سروری و کانتینری رایج مناسب می‌کند.

#GoMLX #Go #MachineLearning #PyTorch #TensorFlow #Linux #MLOps

🟣لینک مقاله:
https://golangweekly.com/link/174649/web


👑 @gopher_academy
21
🔵 عنوان مقاله
TableWriter 1.1: Render Rich Text-Based Tables

🟢 خلاصه مقاله:
جدول‌نویسی TableWriter 1.1 یک کتابخانه چندمنظوره برای رندر کردن جدول‌های متنیِ خوانا در قالب‌های مختلف است. خروجی‌های استاندارد مانند ASCII، Unicode، Markdown و HTML را پوشش می‌دهد و برای ترمینال‌های رنگی نیز مناسب است؛ بنابراین برای ابزارهای خط فرمان، گزارش‌ها و مستندسازی انتخابی کاربردی محسوب می‌شود. تمرکز آن بر انعطاف‌پذیری و خوانایی است تا با تنظیم چینش، فاصله‌ها و مرزبندی، داده‌های متفاوت را به شکلی منظم نمایش دهد. README این پروژه با مثال‌های فراوان، شروع کار را سریع و بی‌دردسر می‌کند.

#TableWriter #ASCII #Unicode #Markdown #HTML #Terminal #CLI #OpenSource

🟣لینک مقاله:
https://golangweekly.com/link/174651/web


👑 @gopher_academy
1