🔵 عنوان مقاله
Kubernetes CPU Limits and Go
🟢 خلاصه مقاله:
بهروزرسانی این مقاله توضیح میدهد که چرا runtime زبان Go بهطور پیشفرض از محدودیتهای CPU در Kubernetes خبر ندارد و چگونه همین موضوع میتواند به oversubscription و در نتیجه throttling و جهشهای تاخیری منجر شود. راهحل عملی، همراستاکردن GOMAXPROCS با سهم واقعی CPU کانتینر (براساس cgroups) است؛ یا با تنظیم متغیر محیطی GOMAXPROCS یا با استفاده از کتابخانه go.uber.org/automaxprocs تا runtime با ظرفیت واقعی زمانبندی کند. از نظر عملیاتی، برای سرویسهای حساس به تاخیر بهتر است از limit سخت CPU پرهیز کرده و به request بههمراه HPA اتکا کنید؛ در صورت اجبار به limit، سقف را طوری بگذارید که throttling حداقلی باشد و در صورت نیاز از CPU pinning و QoS مناسب بهره بگیرید. ارزیابی این تنظیمات با سنجههایی مانند container_cpu_cfs_throttled_seconds_total و توزیع تاخیر و نیز متریکهای runtime در Go، تصویر دقیقی از تاثیر بهینهسازیها ارائه میکند.
#Kubernetes #Go #GOMAXPROCS #cgroups #CPUThrottling #ContainerPerformance #DevOps #SRE
🟣لینک مقاله:
https://golangweekly.com/link/174644/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Kubernetes CPU Limits and Go
🟢 خلاصه مقاله:
بهروزرسانی این مقاله توضیح میدهد که چرا runtime زبان Go بهطور پیشفرض از محدودیتهای CPU در Kubernetes خبر ندارد و چگونه همین موضوع میتواند به oversubscription و در نتیجه throttling و جهشهای تاخیری منجر شود. راهحل عملی، همراستاکردن GOMAXPROCS با سهم واقعی CPU کانتینر (براساس cgroups) است؛ یا با تنظیم متغیر محیطی GOMAXPROCS یا با استفاده از کتابخانه go.uber.org/automaxprocs تا runtime با ظرفیت واقعی زمانبندی کند. از نظر عملیاتی، برای سرویسهای حساس به تاخیر بهتر است از limit سخت CPU پرهیز کرده و به request بههمراه HPA اتکا کنید؛ در صورت اجبار به limit، سقف را طوری بگذارید که throttling حداقلی باشد و در صورت نیاز از CPU pinning و QoS مناسب بهره بگیرید. ارزیابی این تنظیمات با سنجههایی مانند container_cpu_cfs_throttled_seconds_total و توزیع تاخیر و نیز متریکهای runtime در Go، تصویر دقیقی از تاثیر بهینهسازیها ارائه میکند.
#Kubernetes #Go #GOMAXPROCS #cgroups #CPUThrottling #ContainerPerformance #DevOps #SRE
🟣لینک مقاله:
https://golangweekly.com/link/174644/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
pkg.go.dev
automaxprocs package - go.uber.org/automaxprocs - Go Packages
Package automaxprocs automatically sets GOMAXPROCS to match the Linux container CPU quota, if any.
❤1
🔵 عنوان مقاله
Gojekyll: A Fast Go Implementation of Jekyll
🟢 خلاصه مقاله:
Gojekyll یک کلون سریع و «نسبتاً سازگار» از Jekyll است که بهجای Ruby با Go پیادهسازی شده و با ارائه یک باینری تکفایلی، ساخت سایتهای استاتیک را سریعتر و قابلحملتر میکند. بسیاری از سایتهای رایج Jekyll بدون تغییرات جدی اجرا میشوند، اما اگر به افزونهها یا ویژگیهای خاص متکی باشید، ممکن است نیاز به جایگزین یا اصلاح داشته باشید. برای تیمهایی که میخواهند Ruby را از استک خود حذف کرده و زمان ساخت و پیچیدگی CI/CD را کاهش دهند، Gojekyll گزینهای قابل بررسی است.
#Jekyll #Gojekyll #Go #Ruby #StaticSiteGenerator #Performance #Portability #Jamstack
🟣لینک مقاله:
https://golangweekly.com/link/174653/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Gojekyll: A Fast Go Implementation of Jekyll
🟢 خلاصه مقاله:
Gojekyll یک کلون سریع و «نسبتاً سازگار» از Jekyll است که بهجای Ruby با Go پیادهسازی شده و با ارائه یک باینری تکفایلی، ساخت سایتهای استاتیک را سریعتر و قابلحملتر میکند. بسیاری از سایتهای رایج Jekyll بدون تغییرات جدی اجرا میشوند، اما اگر به افزونهها یا ویژگیهای خاص متکی باشید، ممکن است نیاز به جایگزین یا اصلاح داشته باشید. برای تیمهایی که میخواهند Ruby را از استک خود حذف کرده و زمان ساخت و پیچیدگی CI/CD را کاهش دهند، Gojekyll گزینهای قابل بررسی است.
#Jekyll #Gojekyll #Go #Ruby #StaticSiteGenerator #Performance #Portability #Jamstack
🟣لینک مقاله:
https://golangweekly.com/link/174653/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - osteele/gojekyll: A fast Go implementation of the Jekyll blogging engine
A fast Go implementation of the Jekyll blogging engine - osteele/gojekyll
❤2
🔵 عنوان مقاله
Go Allocations Explorer Extension for VSCode
🟢 خلاصه مقاله:
این افزونه با نام Go Allocations Explorer Extension برای VS Code به برنامهنویسان Go کمک میکند تا محل و میزان تخصیص حافظه را بر پایه بنچمارکهای موجودشان مستقیماً داخل ویرایشگر ببینند. با اجرای go test -bench و استفاده از -benchmem، نتایج تخصیصها جمعآوری و به فهرستی قابل پیمایش تبدیل میشود تا بتوانید بهسرعت هاتاسپاتها را یافته و از همان ورودیها به کد مربوطه بپرید. امکان اجرا و تکرار بنچمارکها، مشاهده و مقایسه سریع نتایج، و مرتبسازی/فیلتر کردن بر اساس پکیج، تست یا تابع فراهم است. راهاندازی ساده است، فقط نیاز به ابزار Go دارد و روی macOS، Linux و Windows کار میکند. خروجیها در خود VS Code به شکل قابل فهم ارائه میشوند تا کاهش تخصیصها، کم شدن فشار GC و بهبود تأخیر بهصورت مستمر و در جریان کدنویسی انجام شود.
#Go #VSCode #Golang #Performance #Benchmarking #MemoryAllocations #Profiling #DeveloperTools
🟣لینک مقاله:
https://golangweekly.com/link/174659/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go Allocations Explorer Extension for VSCode
🟢 خلاصه مقاله:
این افزونه با نام Go Allocations Explorer Extension برای VS Code به برنامهنویسان Go کمک میکند تا محل و میزان تخصیص حافظه را بر پایه بنچمارکهای موجودشان مستقیماً داخل ویرایشگر ببینند. با اجرای go test -bench و استفاده از -benchmem، نتایج تخصیصها جمعآوری و به فهرستی قابل پیمایش تبدیل میشود تا بتوانید بهسرعت هاتاسپاتها را یافته و از همان ورودیها به کد مربوطه بپرید. امکان اجرا و تکرار بنچمارکها، مشاهده و مقایسه سریع نتایج، و مرتبسازی/فیلتر کردن بر اساس پکیج، تست یا تابع فراهم است. راهاندازی ساده است، فقط نیاز به ابزار Go دارد و روی macOS، Linux و Windows کار میکند. خروجیها در خود VS Code به شکل قابل فهم ارائه میشوند تا کاهش تخصیصها، کم شدن فشار GC و بهبود تأخیر بهصورت مستمر و در جریان کدنویسی انجام شود.
#Go #VSCode #Golang #Performance #Benchmarking #MemoryAllocations #Profiling #DeveloperTools
🟣لینک مقاله:
https://golangweekly.com/link/174659/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Visualstudio
Go Allocations Explorer - Visual Studio Marketplace
Extension for Visual Studio Code - An extension that helps locate Go allocations, using your benchmarks.
❤2👍1
🔵 عنوان مقاله
Building Conway’s Game of Life with raylib-go
🟢 خلاصه مقاله:
یک پروژه تفننی و آموزشی است: پیادهسازی Conway’s Game of Life با استفاده از raylib-go در Go. برنامه یک پنجره باز میکند، شبکهای دوبعدی از سلولها میسازد و هر فریم سلولهای زنده و مرده را بهصورت مستطیلهای رنگی رسم میکند. قوانین استاندارد (شمارش ۸ همسایه و اعمال قوانین کمجمعیتی، بقا، تراکم و تولیدمثل) با double-buffering اجرا میشوند تا محاسبات نسل بعدی تمیز و قابل اتکا باشد و در صورت نیاز امکان دورپیچی مرزها هم در نظر گرفته شده است. تعاملها شامل توقف/ادامه، گامبهگام، تنظیم سرعت، پاکسازی یا تصادفیسازی صفحه و تغییر وضعیت سلولها با کلیک ماوس است؛ ذخیره/بارگذاری الگوهای ساده هم قابل افزودن است. حلقه بهروزرسانی مستقل از نرخ رندر زمانبندی میشود تا اجرای روان و کارآمد حفظ شود و روی Windows، macOS و Linux بهخوبی اجرا میشود. کد نهایی ارائه شده و برای توسعه ایدههایی مانند کتابخانه الگوها، کنترلهای بهتر زوم/پن، گرادیانرنگ بر اساس سن سلول و ارزیابی عملکرد قابل گسترش است.
#ConwaysGameOfLife #raylib #raylibgo #Go #GameDev #CellularAutomata #GraphicsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174642/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Building Conway’s Game of Life with raylib-go
🟢 خلاصه مقاله:
یک پروژه تفننی و آموزشی است: پیادهسازی Conway’s Game of Life با استفاده از raylib-go در Go. برنامه یک پنجره باز میکند، شبکهای دوبعدی از سلولها میسازد و هر فریم سلولهای زنده و مرده را بهصورت مستطیلهای رنگی رسم میکند. قوانین استاندارد (شمارش ۸ همسایه و اعمال قوانین کمجمعیتی، بقا، تراکم و تولیدمثل) با double-buffering اجرا میشوند تا محاسبات نسل بعدی تمیز و قابل اتکا باشد و در صورت نیاز امکان دورپیچی مرزها هم در نظر گرفته شده است. تعاملها شامل توقف/ادامه، گامبهگام، تنظیم سرعت، پاکسازی یا تصادفیسازی صفحه و تغییر وضعیت سلولها با کلیک ماوس است؛ ذخیره/بارگذاری الگوهای ساده هم قابل افزودن است. حلقه بهروزرسانی مستقل از نرخ رندر زمانبندی میشود تا اجرای روان و کارآمد حفظ شود و روی Windows، macOS و Linux بهخوبی اجرا میشود. کد نهایی ارائه شده و برای توسعه ایدههایی مانند کتابخانه الگوها، کنترلهای بهتر زوم/پن، گرادیانرنگ بر اساس سن سلول و ارزیابی عملکرد قابل گسترش است.
#ConwaysGameOfLife #raylib #raylibgo #Go #GameDev #CellularAutomata #GraphicsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174642/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
packagemain.tech
Building Conway’s Game of Life in Go with raylib-go
A step-by-step tutorial on building Conway’s Game of Life in Go, using raylib-go for graphics. Learn how to draw grids, apply the rules of life, and simulate evolving patterns.
❤1
🔵 عنوان مقاله
Flight Recorder in Go 1.25
🟢 خلاصه مقاله:
Flight Recorder در Go 1.25 ابزاری تشخیصی است که بهصورت پیوسته ردیابی اجرای برنامه را ضبط میکند و چند ثانیهی اخیر را در یک بافر چرخشی نگه میدارد. مزیت اصلی این است که پس از وقوع مشکل، میتوان همان پنجره زمانیِ مرتبط را ذخیره و تحلیل کرد، بدون نیاز به فعالبودنِ دائمیِ ردیابی سنگین. این قابلیت برای عیبیابی مسائل گذرا در محیط production—مثل افزایش مقطعی تاخیر، بنبستها، رقابت بر سر قفلها یا تعاملات GC—با سربار کم مفید است و زمان رسیدن به ریشه مشکل را کاهش میدهد. همچنین میتوان بخش ضبطشده را صادر کرد و در ابزارهای آشنای ردیابی Go بررسی نمود تا اتفاقات منتهی به رخداد بهروشنی دیده شود.
#Go #Go125 #FlightRecorder #Tracing #Diagnostics #Observability #ProductionDebugging #Profiling
🟣لینک مقاله:
https://golangweekly.com/link/175049/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Flight Recorder in Go 1.25
🟢 خلاصه مقاله:
Flight Recorder در Go 1.25 ابزاری تشخیصی است که بهصورت پیوسته ردیابی اجرای برنامه را ضبط میکند و چند ثانیهی اخیر را در یک بافر چرخشی نگه میدارد. مزیت اصلی این است که پس از وقوع مشکل، میتوان همان پنجره زمانیِ مرتبط را ذخیره و تحلیل کرد، بدون نیاز به فعالبودنِ دائمیِ ردیابی سنگین. این قابلیت برای عیبیابی مسائل گذرا در محیط production—مثل افزایش مقطعی تاخیر، بنبستها، رقابت بر سر قفلها یا تعاملات GC—با سربار کم مفید است و زمان رسیدن به ریشه مشکل را کاهش میدهد. همچنین میتوان بخش ضبطشده را صادر کرد و در ابزارهای آشنای ردیابی Go بررسی نمود تا اتفاقات منتهی به رخداد بهروشنی دیده شود.
#Go #Go125 #FlightRecorder #Tracing #Diagnostics #Observability #ProductionDebugging #Profiling
🟣لینک مقاله:
https://golangweekly.com/link/175049/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go.dev
Flight Recorder in Go 1.25 - The Go Programming Language
Go 1.25 introduces a new tool in the diagnostic toolbox, flight recording.
👍1
🔵 عنوان مقاله
3 Critical TTL Patterns for In-Memory Caching
🟢 خلاصه مقاله:
این مقاله سه الگوی کلیدی TTL برای کش درونحافظهای را توضیح میدهد و نشان میدهد چگونه انتخاب درست میان تازگی داده، کارایی و پایداری را ممکن میکند. الگوی اول، TTL ثابت است: هر مقدار پس از مدت مشخص منقضی میشود؛ ساده و قابلپیشبینی است، اما نزدیک انقضا میتواند داده قدیمی ارائه کند و پس از انقضا به «thundering herd» منجر شود مگر اینکه با jitter و همگرایی درخواستها مدیریت شود. الگوی دوم، TTL لغزشی است: هر دسترسی عمر آیتم را تمدید میکند، برای کلیدهای پرترافیک عالی است اما بدون «حداکثر عمر» ممکن است بعضی مقادیر عملاً هرگز تازهسازی نشوند. الگوی سوم، stale-while-revalidate (و refresh-ahead) است: مقدار کمی کهنه فوراً سرو میشود و تازهسازی در پسزمینه انجام میگیرد؛ با single-flight از هجوم درخواستهای همسان جلوگیری میکند و در صورت خطا میتوان با stale-if-error موقتاً از آخرین مقدار سالم استفاده کرد. در عمل ترکیب این الگوها—بههمراه TTLهای متفاوت برای هر کلید، jitter، backoff و رصد دقیق نرخ hit/miss—به تعادل بهینه میانجامد. نویسنده برای نمایش پیادهسازیهای عملی از کتابخانه Hot در اکوسیستم Go بهره میگیرد تا استفاده از این الگوها ساده و کارا شود.
#Caching #TTL #InMemoryCache #Go #Golang #StaleWhileRevalidate #Performance #CacheStampede
🟣لینک مقاله:
https://golangweekly.com/link/175058/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
3 Critical TTL Patterns for In-Memory Caching
🟢 خلاصه مقاله:
این مقاله سه الگوی کلیدی TTL برای کش درونحافظهای را توضیح میدهد و نشان میدهد چگونه انتخاب درست میان تازگی داده، کارایی و پایداری را ممکن میکند. الگوی اول، TTL ثابت است: هر مقدار پس از مدت مشخص منقضی میشود؛ ساده و قابلپیشبینی است، اما نزدیک انقضا میتواند داده قدیمی ارائه کند و پس از انقضا به «thundering herd» منجر شود مگر اینکه با jitter و همگرایی درخواستها مدیریت شود. الگوی دوم، TTL لغزشی است: هر دسترسی عمر آیتم را تمدید میکند، برای کلیدهای پرترافیک عالی است اما بدون «حداکثر عمر» ممکن است بعضی مقادیر عملاً هرگز تازهسازی نشوند. الگوی سوم، stale-while-revalidate (و refresh-ahead) است: مقدار کمی کهنه فوراً سرو میشود و تازهسازی در پسزمینه انجام میگیرد؛ با single-flight از هجوم درخواستهای همسان جلوگیری میکند و در صورت خطا میتوان با stale-if-error موقتاً از آخرین مقدار سالم استفاده کرد. در عمل ترکیب این الگوها—بههمراه TTLهای متفاوت برای هر کلید، jitter، backoff و رصد دقیق نرخ hit/miss—به تعادل بهینه میانجامد. نویسنده برای نمایش پیادهسازیهای عملی از کتابخانه Hot در اکوسیستم Go بهره میگیرد تا استفاده از این الگوها ساده و کارا شود.
#Caching #TTL #InMemoryCache #Go #Golang #StaleWhileRevalidate #Performance #CacheStampede
🟣لینک مقاله:
https://golangweekly.com/link/175058/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Substack
3 Critical TTL Patterns for In-Memory Caching
Most caching libraries get TTL expiration wrong. They focus on per-key complexity while missing the patterns that actually prevent production outages.
👍1
🔵 عنوان مقاله
celebrates its tenth anniversary with a look
🟢 خلاصه مقاله:
این مقاله دهمین سالگرد یک ابزار زیرساختی متنباز مبتنی بر Go را جشن میگیرد و نشان میدهد چگونه از یک ابزار کوچک به مولفهای بالغ و شناختهشده در تیمهای DevOps و SRE تبدیل شده است؛ با بهبودهای کارایی و پایداری، معماری افزونهپذیر، API/CLI پایدار و تمرکز جدی بر امنیت و زنجیره تأمین. اکوسیستم آن با جامعهای پویا، مستندات بهتر، نسخهبندی معنادار، سازگاری عقبرو و یکپارچگی گسترده با فضای ابری، CI/CD و ابزارهای مشاهدهپذیری رشد کرده است. در ادامه، نقشهراه بر بهبود تجربه کاربری، غنیتر شدن API/SDK، تقویت policy-as-code، مدیریت بهتر وضعیت و دریفت، و اتوماسیون ایمنتر در مقیاس تأکید میکند.
#Go #Infrastructure #DevOps #OpenSource #Cloud #Automation #Security #Observability
🟣لینک مقاله:
https://golangweekly.com/link/175053/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
celebrates its tenth anniversary with a look
🟢 خلاصه مقاله:
این مقاله دهمین سالگرد یک ابزار زیرساختی متنباز مبتنی بر Go را جشن میگیرد و نشان میدهد چگونه از یک ابزار کوچک به مولفهای بالغ و شناختهشده در تیمهای DevOps و SRE تبدیل شده است؛ با بهبودهای کارایی و پایداری، معماری افزونهپذیر، API/CLI پایدار و تمرکز جدی بر امنیت و زنجیره تأمین. اکوسیستم آن با جامعهای پویا، مستندات بهتر، نسخهبندی معنادار، سازگاری عقبرو و یکپارچگی گسترده با فضای ابری، CI/CD و ابزارهای مشاهدهپذیری رشد کرده است. در ادامه، نقشهراه بر بهبود تجربه کاربری، غنیتر شدن API/SDK، تقویت policy-as-code، مدیریت بهتر وضعیت و دریفت، و اتوماسیون ایمنتر در مقیاس تأکید میکند.
#Go #Infrastructure #DevOps #OpenSource #Cloud #Automation #Security #Observability
🟣لینک مقاله:
https://golangweekly.com/link/175053/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Traefik Labs
Traefik's 10-Year Anniversary: A Community's Journey
10 years ago, I made a small reverse proxy project public. Fast forward to today and Traefik has 3.4B downloads and 56k GitHub stars. See how it unfolded.
🔵 عنوان مقاله
Slice Tails Don't Grow Forever
🟢 خلاصه مقاله:
** این مطلب از Golang Weekly توضیح میدهد که در Go، وقتی از یک slice یک “tail” مثل s[i:] میسازیم، رشد آن به capacity وابسته است و پایدار و بینهایت نیست. تا وقتی capacity اجازه دهد، append روی همان آرایهی پشتی انجام میشود؛ اما بهمحض عبور از capacity، runtime آرایهی جدیدی میسازد و دادهها را کپی میکند، در نتیجه اشتراک حافظه با sliceهای قبلی از بین میرود. این رفتار هم میتواند باعث شگفتی در منطق اشتراکگذاری دادهها شود و هم روی کارایی و مصرف حافظه اثر بگذارد (مثلاً نگهداشتن یک زیر-slice کوچک میتواند یک آرایهی بزرگ را در حافظه زنده نگه دارد). نتیجهٔ عملی: روی رشد بینهایت tail حساب نکنید، خروجی append را یک slice بالقوه با آرایهی پشتی جدید در نظر بگیرید، برای آزادسازی حافظه از copy استفاده کنید، در صورت نیاز capacity مناسب را از قبل با make در نظر بگیرید و حتماً با benchmark تصمیم بگیرید.
#Go #Golang #Slices #Append #MemoryManagement #Performance #GolangWeekly
🟣لینک مقاله:
https://golangweekly.com/link/175065/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Slice Tails Don't Grow Forever
🟢 خلاصه مقاله:
** این مطلب از Golang Weekly توضیح میدهد که در Go، وقتی از یک slice یک “tail” مثل s[i:] میسازیم، رشد آن به capacity وابسته است و پایدار و بینهایت نیست. تا وقتی capacity اجازه دهد، append روی همان آرایهی پشتی انجام میشود؛ اما بهمحض عبور از capacity، runtime آرایهی جدیدی میسازد و دادهها را کپی میکند، در نتیجه اشتراک حافظه با sliceهای قبلی از بین میرود. این رفتار هم میتواند باعث شگفتی در منطق اشتراکگذاری دادهها شود و هم روی کارایی و مصرف حافظه اثر بگذارد (مثلاً نگهداشتن یک زیر-slice کوچک میتواند یک آرایهی بزرگ را در حافظه زنده نگه دارد). نتیجهٔ عملی: روی رشد بینهایت tail حساب نکنید، خروجی append را یک slice بالقوه با آرایهی پشتی جدید در نظر بگیرید، برای آزادسازی حافظه از copy استفاده کنید، در صورت نیاز capacity مناسب را از قبل با make در نظر بگیرید و حتماً با benchmark تصمیم بگیرید.
#Go #Golang #Slices #Append #MemoryManagement #Performance #GolangWeekly
🟣لینک مقاله:
https://golangweekly.com/link/175065/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🤝1
🔵 عنوان مقاله
'We Tried Go's Experimental Green Tea Garbage Collector and It Didn't Help Performance'
🟢 خلاصه مقاله:
** تیم Dolt در Go 1.25 جمعآورنده زباله آزمایشی Green Tea را فعال و ارزیابی کرد، اما در سناریوی خاص خود بهبود محسوسی در کارایی مشاهده نکرد. با این حال، از آنجا که رفتار GC به نوع بار کاری وابسته است و Green Tea همچنان آزمایشی و اختیاری است، توصیه میشود هر تیم آن را در محیط و بنچمارکهای خود امتحان کرده و بر اساس شاخصهای واقعی تصمیم بگیرد.
#Go #Golang #GarbageCollector #GreenTea #Performance #Benchmarking #Dolt #Go1_25
🟣لینک مقاله:
https://golangweekly.com/link/175055/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
'We Tried Go's Experimental Green Tea Garbage Collector and It Didn't Help Performance'
🟢 خلاصه مقاله:
** تیم Dolt در Go 1.25 جمعآورنده زباله آزمایشی Green Tea را فعال و ارزیابی کرد، اما در سناریوی خاص خود بهبود محسوسی در کارایی مشاهده نکرد. با این حال، از آنجا که رفتار GC به نوع بار کاری وابسته است و Green Tea همچنان آزمایشی و اختیاری است، توصیه میشود هر تیم آن را در محیط و بنچمارکهای خود امتحان کرده و بر اساس شاخصهای واقعی تصمیم بگیرد.
#Go #Golang #GarbageCollector #GreenTea #Performance #Benchmarking #Dolt #Go1_25
🟣لینک مقاله:
https://golangweekly.com/link/175055/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Dolthub
We tried Go's experimental Green Tea garbage collector and it didn't help performance
Go 1.25 includes support for an experimental new garbage collector called Green Tea. We tried it out with Dolt's main performance benchmarks and summarize what difference it made (not much).
❤1
🔵 عنوان مقاله
Starving, Sleeping, and Yielding: Understanding Go's Scheduler
🟢 خلاصه مقاله:
** این مقاله توضیح میدهد که چرا درک رفتار همزمان در Go به شناخت زمانبند آن بستگی دارد. زمانبند با مدل G‑M‑P، goroutineها را روی نخهای سیستمعامل اجرا میکند، آنها را هنگام بلاکشدن پارک میکند و با netpoller برای I/O هماهنگ میشود. سه وضعیت کلیدی بررسی میشود: Starvation وقتی رخ میدهد که goroutineهای آماده اجرا بهدلیل لوپهای سنگین CPU، الگوهای ناعادلانه در select، یا قفلها و syscall/cgo طولانی به CPU دسترسی پیدا نمیکنند؛ Sleeping با time.Sleep برای توقف کنترلشده مفید است اما میتواند تأخیر بسازد؛ و Yielding با runtime.Gosched امکان میدهد در حلقههای CPU‑محور به دیگر goroutineها نوبت بدهیم. از Go 1.14 به بعد، preemption غیرهمکارانه کمک کرده، اما حلقههای بدون نقطه توقف هنوز مشکلسازند. راهکارها شامل شکستن کارهای سنگین به بخشهای کوچک، پرهیز از busy‑wait، استفاده از context و timeout، طراحی منصفانه channel/select، کوچک نگهداشتن بخشهای بحرانی و تنظیم GOMAXPROCS است. برای عیبیابی نیز از go tool trace، runtime/trace، pprof و GODEBUG=schedtrace استفاده کنید و فقط در صورت نیاز، sleep یا yield موضعی و مستند به کار ببرید.
#Go #Golang #Concurrency #Scheduler #Goroutines #Performance #Parallelism #Systems
🟣لینک مقاله:
https://golangweekly.com/link/175057/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Starving, Sleeping, and Yielding: Understanding Go's Scheduler
🟢 خلاصه مقاله:
** این مقاله توضیح میدهد که چرا درک رفتار همزمان در Go به شناخت زمانبند آن بستگی دارد. زمانبند با مدل G‑M‑P، goroutineها را روی نخهای سیستمعامل اجرا میکند، آنها را هنگام بلاکشدن پارک میکند و با netpoller برای I/O هماهنگ میشود. سه وضعیت کلیدی بررسی میشود: Starvation وقتی رخ میدهد که goroutineهای آماده اجرا بهدلیل لوپهای سنگین CPU، الگوهای ناعادلانه در select، یا قفلها و syscall/cgo طولانی به CPU دسترسی پیدا نمیکنند؛ Sleeping با time.Sleep برای توقف کنترلشده مفید است اما میتواند تأخیر بسازد؛ و Yielding با runtime.Gosched امکان میدهد در حلقههای CPU‑محور به دیگر goroutineها نوبت بدهیم. از Go 1.14 به بعد، preemption غیرهمکارانه کمک کرده، اما حلقههای بدون نقطه توقف هنوز مشکلسازند. راهکارها شامل شکستن کارهای سنگین به بخشهای کوچک، پرهیز از busy‑wait، استفاده از context و timeout، طراحی منصفانه channel/select، کوچک نگهداشتن بخشهای بحرانی و تنظیم GOMAXPROCS است. برای عیبیابی نیز از go tool trace، runtime/trace، pprof و GODEBUG=schedtrace استفاده کنید و فقط در صورت نیاز، sleep یا yield موضعی و مستند به کار ببرید.
#Go #Golang #Concurrency #Scheduler #Goroutines #Performance #Parallelism #Systems
🟣لینک مقاله:
https://golangweekly.com/link/175057/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Bitfield Consulting
Starving, sleeping, and yielding: understanding Go's scheduler — Bitfield Consulting
Writing concurrent programs is easy, but understanding why they don’t work is much harder. In our continuing tutorial, we’ll learn about when and why goroutines starve, sleep, or yield.
❤1
🔵 عنوان مقاله
Accepted! Go Proposals Distilled
🟢 خلاصه مقاله:
این مجموعه با عنوان Accepted! Go Proposals Distilled خلاصهای روان از پیشنهادهای پذیرفتهشده زبان Go ارائه میکند تا بدون خواندن کل پروپوزالها، سریع از تغییرات نسخههای آینده باخبر شوید. هر پست دلیل پذیرش، تغییرات و کاربرد عملی آن را خلاصه میکند. تاکنون Anton موضوع maphash را پوشش داده و ادامهٔ سری نیز همزمان با پیشروی پیشنهادهای پذیرفتهشده منتشر خواهد شد.
#Go #Golang #GoProposals #GoUpdates #ProgrammingLanguages #DeveloperNews #Maphash
🟣لینک مقاله:
https://golangweekly.com/link/175050/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Accepted! Go Proposals Distilled
🟢 خلاصه مقاله:
این مجموعه با عنوان Accepted! Go Proposals Distilled خلاصهای روان از پیشنهادهای پذیرفتهشده زبان Go ارائه میکند تا بدون خواندن کل پروپوزالها، سریع از تغییرات نسخههای آینده باخبر شوید. هر پست دلیل پذیرش، تغییرات و کاربرد عملی آن را خلاصه میکند. تاکنون Anton موضوع maphash را پوشش داده و ادامهٔ سری نیز همزمان با پیشروی پیشنهادهای پذیرفتهشده منتشر خواهد شد.
#Go #Golang #GoProposals #GoUpdates #ProgrammingLanguages #DeveloperNews #Maphash
🟣لینک مقاله:
https://golangweekly.com/link/175050/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
antonz.org
Accepted! Go proposals distilled
Stay updated on changes coming in future Go releases.
👍1🎉1 1
🔵 عنوان مقاله
take control with Tuple
🟢 خلاصه مقاله:
این مطلب از Golang Weekly نشان میدهد چگونه بهکارگیری سنجیده Tuple میتواند به توسعهدهندگان Go کمک کند روی جریان داده، مدیریت خطا و همزمانی کنترل بیشتری داشته باشند. در این رویکرد، Tuple راهی فشرده برای بستن چند مقدار مرتبط در یک واحد نوعدار است که با تکیه بر جنریکها، ضمن کاهش کد تکراری، نیت کد و امضای توابع را شفافتر میکند. کاربردهای کلیدی شامل مدلسازی بار دادهی کانالها، جمعآوری خروجیها در الگوهای فناوت/فناین و عبور جفتهایی مانند (value, error) در پایپلاینهاست؛ با این تأکید که هرجا یک مفهوم دامنهای نامدار لازم است، یک struct کوچک همچنان گزینهی بهتر است. جمعبندی: Tuple گلولهی نقرهای نیست، اما اگر هدفمند استفاده شود، بدون لطمه به خوانایی یا ایمنی نوعی، کنترل و شفافیت بیشتری به کدهای Go میدهد و میتوان آن را بهصورت تدریجی در مرز پکیجها و پایپلاینها به کار گرفت.
#Golang #Go #Tuple #GolangWeekly #Generics #Concurrency #TypeSafety #SoftwareDesign
🟣لینک مقاله:
https://golangweekly.com/link/175071/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
take control with Tuple
🟢 خلاصه مقاله:
این مطلب از Golang Weekly نشان میدهد چگونه بهکارگیری سنجیده Tuple میتواند به توسعهدهندگان Go کمک کند روی جریان داده، مدیریت خطا و همزمانی کنترل بیشتری داشته باشند. در این رویکرد، Tuple راهی فشرده برای بستن چند مقدار مرتبط در یک واحد نوعدار است که با تکیه بر جنریکها، ضمن کاهش کد تکراری، نیت کد و امضای توابع را شفافتر میکند. کاربردهای کلیدی شامل مدلسازی بار دادهی کانالها، جمعآوری خروجیها در الگوهای فناوت/فناین و عبور جفتهایی مانند (value, error) در پایپلاینهاست؛ با این تأکید که هرجا یک مفهوم دامنهای نامدار لازم است، یک struct کوچک همچنان گزینهی بهتر است. جمعبندی: Tuple گلولهی نقرهای نیست، اما اگر هدفمند استفاده شود، بدون لطمه به خوانایی یا ایمنی نوعی، کنترل و شفافیت بیشتری به کدهای Go میدهد و میتوان آن را بهصورت تدریجی در مرز پکیجها و پایپلاینها به کار گرفت.
#Golang #Go #Tuple #GolangWeekly #Generics #Concurrency #TypeSafety #SoftwareDesign
🟣لینک مقاله:
https://golangweekly.com/link/175071/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Tuple
Generic Tools Suck
The best pair programming app for macOS and Windows developers.
🔵 عنوان مقاله
Register Allocation in the Go Compiler
🟢 خلاصه مقاله:
** این یادداشت دو موضوع فنی اما اثرگذار بر کارایی در Go را کنار هم میگذارد: نحوه تخصیص ثبات در کامپایلر و این واقعیت که «دمِ Sliceها برای همیشه رشد نمیکند». بخش نخست با الهام از تجربههای Vladimir Makarov در دنیای تخصیص ثبات توضیح میدهد که پشتصحنهی SSA در کامپایلر Go چگونه محدودههای حیات متغیرها را روی تعداد کمی ثبات سختافزاری نگاشت میکند، φها را حل و حرکتها را ادغام میکند و در صورت نیاز سرریز به پشته انجام میدهد. چالش اصلی، حفظ کیفیت کد (کاهش حرکتها و سرریزها) در کنار سرعت بالای کامپایل است؛ و ایدههایی مانند ترکیب رویکردهای linear-scan و coloring، مدیریت دقیق ثباتهای caller/callee-saved، سرریز در مسیرهای کماحتمال و rematerialization انتخابی به ایجاد این توازن کمک میکنند.
بخش دوم، با تکیه بر نوشتهی Ted Unangst، یادآور میشود که Slice در Go تنها وصلهای روی یک آرایه مشترک است: append میتواند باعث تخصیص دوباره و کپی شود، رشد ظرفیت با بزرگتر شدن Slice کند میشود، و با sub-slice ممکن است حافظهی «سرِ» حذفشده همچنان نگه داشته شود. «دمِ» Slice بدون ظرفیت کافی گسترش نمییابد و برای رها شدن حافظهی قدیمی باید گاهی به یک آرایهی تازه کپی کنید. راهکارها شامل استفاده از make با ظرفیت مناسب، پرهیز از نگهداشتن referenceهای ناخواسته به آرایهی بزرگ و کپی آگاهانه برای آزادسازی حافظه است.
جمعبندی: همانطور که انتخابهای تخصیص ثبات روی تعداد دستورها و سرریز اثر میگذارد، الگوهای کار با Slice نیز روی مصرف حافظه و فشار GC اثر دارند. درک این جزئیات به کدی چابکتر، تأخیر پایدارتر و رفتار قابل پیشبینیتر در سرویسهای Go منجر میشود.
#Go #Golang #Compiler #RegisterAllocation #Performance #MemoryManagement #Slices #SystemsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/175064/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Register Allocation in the Go Compiler
🟢 خلاصه مقاله:
** این یادداشت دو موضوع فنی اما اثرگذار بر کارایی در Go را کنار هم میگذارد: نحوه تخصیص ثبات در کامپایلر و این واقعیت که «دمِ Sliceها برای همیشه رشد نمیکند». بخش نخست با الهام از تجربههای Vladimir Makarov در دنیای تخصیص ثبات توضیح میدهد که پشتصحنهی SSA در کامپایلر Go چگونه محدودههای حیات متغیرها را روی تعداد کمی ثبات سختافزاری نگاشت میکند، φها را حل و حرکتها را ادغام میکند و در صورت نیاز سرریز به پشته انجام میدهد. چالش اصلی، حفظ کیفیت کد (کاهش حرکتها و سرریزها) در کنار سرعت بالای کامپایل است؛ و ایدههایی مانند ترکیب رویکردهای linear-scan و coloring، مدیریت دقیق ثباتهای caller/callee-saved، سرریز در مسیرهای کماحتمال و rematerialization انتخابی به ایجاد این توازن کمک میکنند.
بخش دوم، با تکیه بر نوشتهی Ted Unangst، یادآور میشود که Slice در Go تنها وصلهای روی یک آرایه مشترک است: append میتواند باعث تخصیص دوباره و کپی شود، رشد ظرفیت با بزرگتر شدن Slice کند میشود، و با sub-slice ممکن است حافظهی «سرِ» حذفشده همچنان نگه داشته شود. «دمِ» Slice بدون ظرفیت کافی گسترش نمییابد و برای رها شدن حافظهی قدیمی باید گاهی به یک آرایهی تازه کپی کنید. راهکارها شامل استفاده از make با ظرفیت مناسب، پرهیز از نگهداشتن referenceهای ناخواسته به آرایهی بزرگ و کپی آگاهانه برای آزادسازی حافظه است.
جمعبندی: همانطور که انتخابهای تخصیص ثبات روی تعداد دستورها و سرریز اثر میگذارد، الگوهای کار با Slice نیز روی مصرف حافظه و فشار GC اثر دارند. درک این جزئیات به کدی چابکتر، تأخیر پایدارتر و رفتار قابل پیشبینیتر در سرویسهای Go منجر میشود.
#Go #Golang #Compiler #RegisterAllocation #Performance #MemoryManagement #Slices #SystemsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/175064/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Vladimir Makarov
Register allocation in the Go compiler
As a maintainer of the GCC register allocator (RA), I naturally have a keen interest in the register allocators used in various industrial compilers. For some compilers, like LLVM and Cranelift, there is sufficient documentation, including papers and presentations…
❤1