🔵Multiple append can be combined into a single call
🟢Multiple calls for append could be combined into a single call for append.
The append built-in function appends elements to the end of a slice. If it has sufficient capacity, the destination is resliced to accommodate the new elements, but if capacity is not enough, then append will allocate a new underlying array and return the updated slice. Therefore, it is necessary to store the result of append, often in the variable holding the slice itself. Appending calls in a single call of append allocates memory just once to accommodate all the elements to be appended. Whereas multiple calls to append introduce many overheads, most notably being the possibility of more calls for memory allocation because the total number of elements to be appended over multiple calls of append is unknown beforehand, resulting in inaccurate preallocation.
🔴 https://go.dev/blog/slices#TOC_9.
#Performance
➖➖➖➖➖➖➖➖➖
🕊 @gopher_academy
🟢Multiple calls for append could be combined into a single call for append.
The append built-in function appends elements to the end of a slice. If it has sufficient capacity, the destination is resliced to accommodate the new elements, but if capacity is not enough, then append will allocate a new underlying array and return the updated slice. Therefore, it is necessary to store the result of append, often in the variable holding the slice itself. Appending calls in a single call of append allocates memory just once to accommodate all the elements to be appended. Whereas multiple calls to append introduce many overheads, most notably being the possibility of more calls for memory allocation because the total number of elements to be appended over multiple calls of append is unknown beforehand, resulting in inaccurate preallocation.
🔴 https://go.dev/blog/slices#TOC_9.
#Performance
➖➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍9❤1🔥1
نکته خیلی جالبش شاید استفاده از GOMEMLIMIT بصورت dynamic هست که در runtime ست میشه..
Go Beyond: Building Performant and Reliable Golang Applications
https://blog.zomato.com/go-beyond-building-performant-and-reliable-golang-applications
✍️حسین نظری
#performance
#golang
#گولنگ
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go Beyond: Building Performant and Reliable Golang Applications
https://blog.zomato.com/go-beyond-building-performant-and-reliable-golang-applications
✍️حسین نظری
#performance
#golang
#گولنگ
➖➖➖➖➖➖➖➖
👑 @gopher_academy
💋1
🔵 عنوان مقاله
Memory Allocation in Go
🟢 خلاصه مقاله:
مدیریت و تخصیص کارای حافظه، پایهی عملکرد و پایداری برنامههای Go است. این مقاله با مجموعهای از نمودارهای روشن، پشتپردهی تخصیص حافظه در Go را شرح میدهد: از نحوهی درخواست حافظه از سیستمعامل و سازماندهی آن در runtime تا تعامل آن با garbage collector و تأثیر الگوهای تخصیص بر فشار GC، تأخیر و کارایی. هدف مقاله ایجاد یک مدل ذهنی عملی است تا—even با تکیه بر پیشفرضهای منطقی Go—بتوانید بهتر پروفایلها را بخوانید، دربارهی تأخیر نتیجهگیری کنید و از تلههای رایج عملکردی دور بمانید.
#Go #Golang #MemoryManagement #GarbageCollection #Performance #GoRuntime #SystemsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174413/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Memory Allocation in Go
🟢 خلاصه مقاله:
مدیریت و تخصیص کارای حافظه، پایهی عملکرد و پایداری برنامههای Go است. این مقاله با مجموعهای از نمودارهای روشن، پشتپردهی تخصیص حافظه در Go را شرح میدهد: از نحوهی درخواست حافظه از سیستمعامل و سازماندهی آن در runtime تا تعامل آن با garbage collector و تأثیر الگوهای تخصیص بر فشار GC، تأخیر و کارایی. هدف مقاله ایجاد یک مدل ذهنی عملی است تا—even با تکیه بر پیشفرضهای منطقی Go—بتوانید بهتر پروفایلها را بخوانید، دربارهی تأخیر نتیجهگیری کنید و از تلههای رایج عملکردی دور بمانید.
#Go #Golang #MemoryManagement #GarbageCollection #Performance #GoRuntime #SystemsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174413/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Melatoni
Memory Allocation in Go
🔥3
🔵 عنوان مقاله
Observe Live SQL Queries in Go with DTrace
🟢 خلاصه مقاله:
این مطلب از Golang Weekly نشان میدهد چطور با استفاده از DTrace بدون تغییر کد و توقف سرویس، کوئریهای SQL را در برنامههای Go بهصورت زنده مشاهده کنیم. نویسنده با معرفی کوتاهی از DTrace بهعنوان یک ابزار ردیابی پویا و کمسربار، قدمبهقدم نحوه راهاندازی روی سیستمعاملهای پشتیبانیشده، اتصال به پردازه در حال اجرا و نوشتن اسکریپتهای ساده برای دیدن متن کوئری، زمان اجرا و الگوهای فراوانی را توضیح میدهد؛ همراه با فیلترگذاری برای محدود کردن خروجی به سرویس/کاربر/درایور موردنظر و نکاتی برای حفظ سربار کم.
کاربرد این روش، عیبیابی سریع مسائلی مثل کوئریهای کند، الگوهای N+1، شاخصهای مفقود و ORM پرحرف در شرایط واقعی تولید است. این رویکرد مکمل لاگها و APM است و امکان تشخیص فوری و تأیید سریع اصلاحات را میدهد. در بخش ملاحظات، به تفاوت پشتیبانی پلتفرمها (مثل FreeBSD و برخی نسخههای macOS؛ و پیشنهاد eBPF روی Linux)، نیاز به دسترسیهای بالا، حساسیت دادههای متنی کوئری و ضرورت سنجش سربار در محیط staging اشاره میشود.
#Go #DTrace #SQL #Observability #Performance #GolangWeekly #eBPF #Database
🟣لینک مقاله:
https://golangweekly.com/link/174425/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Observe Live SQL Queries in Go with DTrace
🟢 خلاصه مقاله:
این مطلب از Golang Weekly نشان میدهد چطور با استفاده از DTrace بدون تغییر کد و توقف سرویس، کوئریهای SQL را در برنامههای Go بهصورت زنده مشاهده کنیم. نویسنده با معرفی کوتاهی از DTrace بهعنوان یک ابزار ردیابی پویا و کمسربار، قدمبهقدم نحوه راهاندازی روی سیستمعاملهای پشتیبانیشده، اتصال به پردازه در حال اجرا و نوشتن اسکریپتهای ساده برای دیدن متن کوئری، زمان اجرا و الگوهای فراوانی را توضیح میدهد؛ همراه با فیلترگذاری برای محدود کردن خروجی به سرویس/کاربر/درایور موردنظر و نکاتی برای حفظ سربار کم.
کاربرد این روش، عیبیابی سریع مسائلی مثل کوئریهای کند، الگوهای N+1، شاخصهای مفقود و ORM پرحرف در شرایط واقعی تولید است. این رویکرد مکمل لاگها و APM است و امکان تشخیص فوری و تأیید سریع اصلاحات را میدهد. در بخش ملاحظات، به تفاوت پشتیبانی پلتفرمها (مثل FreeBSD و برخی نسخههای macOS؛ و پیشنهاد eBPF روی Linux)، نیاز به دسترسیهای بالا، حساسیت دادههای متنی کوئری و ضرورت سنجش سربار در محیط staging اشاره میشود.
#Go #DTrace #SQL #Observability #Performance #GolangWeekly #eBPF #Database
🟣لینک مقاله:
https://golangweekly.com/link/174425/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🔥2
🔵 عنوان مقاله
explains more, including why this matters.
🟢 خلاصه مقاله:
آخرین شماره Golang Weekly مقالهای دارد که یک موضوع بهروز در اکوسیستم Go را با زمینهسازی روشن و کاربردی شرح میدهد: چرا اکنون مهم است، چه مزایا و ملاحظاتی دارد و چه بدهبستانهایی پیشِروست. با توضیحهای فشرده و مثالهای قابل اتکا، الگوهای مناسب تولید، خطاهای رایج و مسیرهای مهاجرت برای سرویسها و کتابخانهها را نشان میدهد. همچنین به پیامدهای معمول چنین تغییراتی بر modules، مدیریت وابستگی، CI، راهبرد تست، بنچمارک و پروفایلینگ میپردازد و راهکارهایی برای کاهش ریسک و سازگاری پیشنهاد میکند. در پایان، اثر آن بر جامعه و تیمها را جمعبندی کرده و منابع تکمیلی برای مطالعه بیشتر معرفی میکند؛ نکاتی عملی، چه برای بکاندهای پُرترافیک و چه برای CLIهای کوچک.
#Go #Golang #GolangWeekly #SoftwareEngineering #Backend #DevOps #Performance #Concurrency
🟣لینک مقاله:
https://golangweekly.com/link/174442/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
explains more, including why this matters.
🟢 خلاصه مقاله:
آخرین شماره Golang Weekly مقالهای دارد که یک موضوع بهروز در اکوسیستم Go را با زمینهسازی روشن و کاربردی شرح میدهد: چرا اکنون مهم است، چه مزایا و ملاحظاتی دارد و چه بدهبستانهایی پیشِروست. با توضیحهای فشرده و مثالهای قابل اتکا، الگوهای مناسب تولید، خطاهای رایج و مسیرهای مهاجرت برای سرویسها و کتابخانهها را نشان میدهد. همچنین به پیامدهای معمول چنین تغییراتی بر modules، مدیریت وابستگی، CI، راهبرد تست، بنچمارک و پروفایلینگ میپردازد و راهکارهایی برای کاهش ریسک و سازگاری پیشنهاد میکند. در پایان، اثر آن بر جامعه و تیمها را جمعبندی کرده و منابع تکمیلی برای مطالعه بیشتر معرفی میکند؛ نکاتی عملی، چه برای بکاندهای پُرترافیک و چه برای CLIهای کوچک.
#Go #Golang #GolangWeekly #SoftwareEngineering #Backend #DevOps #Performance #Concurrency
🟣لینک مقاله:
https://golangweekly.com/link/174442/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
River
Dependabot + private Go proxies: how they work and why it matters - River blog
GitHub's Dependabot can now work with private Go proxies/registries. But how do Go proxies even work? Learn how they function, how to configure them for private modules, and why ordering matters.
👍1🔥1
🔵 عنوان مقاله
How Fast is Go? Simulating Millions of Particles on a Smart TV
🟢 خلاصه مقاله:
این مقاله با اجرای یک شبیهسازی بزرگ روی یک Smart TV نشان میدهد Go در عمل چقدر سریع است. نتیجه اصلی: شبیهسازی ۲.۵ میلیون ذره با نرخ ۶۰ فریمبرثانیه و همزمان ارسال داده با ۳۰ فریمبرثانیه به بیش از ۳۰۰ کلاینت (و احتمالاً تا حدود هزار) ممکن شده است. ترکیب کار محاسباتی سنگین و ارسال شبکه همزمان، توان Go در مدیریت بارهای بلادرنگ و استفاده مؤثر از همزمانی را نشان میدهد. با بهینهسازی تخصیص حافظه و استفاده از الگوهای همزمانی Go، تأثیر GC کم و تأخیر قابلپیشبینی باقی مانده و سیستم روی دستگاهی محدود مثل Smart TV نیز پایدار عمل میکند.
#Go #Golang #Performance #Concurrency #RealTime #SmartTV #Simulation #Scalability
🟣لینک مقاله:
https://golangweekly.com/link/174646/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How Fast is Go? Simulating Millions of Particles on a Smart TV
🟢 خلاصه مقاله:
این مقاله با اجرای یک شبیهسازی بزرگ روی یک Smart TV نشان میدهد Go در عمل چقدر سریع است. نتیجه اصلی: شبیهسازی ۲.۵ میلیون ذره با نرخ ۶۰ فریمبرثانیه و همزمان ارسال داده با ۳۰ فریمبرثانیه به بیش از ۳۰۰ کلاینت (و احتمالاً تا حدود هزار) ممکن شده است. ترکیب کار محاسباتی سنگین و ارسال شبکه همزمان، توان Go در مدیریت بارهای بلادرنگ و استفاده مؤثر از همزمانی را نشان میدهد. با بهینهسازی تخصیص حافظه و استفاده از الگوهای همزمانی Go، تأثیر GC کم و تأخیر قابلپیشبینی باقی مانده و سیستم روی دستگاهی محدود مثل Smart TV نیز پایدار عمل میکند.
#Go #Golang #Performance #Concurrency #RealTime #SmartTV #Simulation #Scalability
🟣لینک مقاله:
https://golangweekly.com/link/174646/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
David Gerrells
how fast is go? simulating millions of particles on a smart tv
The challenge, simulate millions of particles in golang, multi-player enabled, cpu only, smart tv compatible.
🍾2 2
🔵 عنوان مقاله
Go's Support for Valgrind Instrumentation
🟢 خلاصه مقاله:
این مقاله درباره پشتیبانی آزمایشی Go از Valgrind است؛ چارچوبی که با ابزارهایی مانند Memcheck، Helgrind، DRD، Cachegrind، Callgrind و Massif برای پروفایلینگ و یافتن خطاهای حافظه و همزمانی بهکار میرود. با این پشتیبانی، برنامههای Go میتوانند به شکل عمیقتری پایش شوند—بهویژه در مرزهای cgo—و علاوه بر ابزارهای داخلی مانند pprof و race detector، گزینههای تشخیصی بیشتری در اختیار دارند. بااینحال، به دلیل سربار اجرایی بالا و ماهیت آزمایشی، نتایج ممکن است شامل خطا یا مثبت کاذب باشد و بهتر است با بیلدهای دیباگ و بارهای کاری کنترلشده استفاده شود. این قابلیت مکمل ابزارهای بومی Go است و جایگزین آنها محسوب نمیشود.
#Go #Valgrind #Instrumentation #Profiling #MemoryLeaks #Concurrency #Performance #Debugging
🟣لینک مقاله:
https://golangweekly.com/link/174628/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go's Support for Valgrind Instrumentation
🟢 خلاصه مقاله:
این مقاله درباره پشتیبانی آزمایشی Go از Valgrind است؛ چارچوبی که با ابزارهایی مانند Memcheck، Helgrind، DRD، Cachegrind، Callgrind و Massif برای پروفایلینگ و یافتن خطاهای حافظه و همزمانی بهکار میرود. با این پشتیبانی، برنامههای Go میتوانند به شکل عمیقتری پایش شوند—بهویژه در مرزهای cgo—و علاوه بر ابزارهای داخلی مانند pprof و race detector، گزینههای تشخیصی بیشتری در اختیار دارند. بااینحال، به دلیل سربار اجرایی بالا و ماهیت آزمایشی، نتایج ممکن است شامل خطا یا مثبت کاذب باشد و بهتر است با بیلدهای دیباگ و بارهای کاری کنترلشده استفاده شود. این قابلیت مکمل ابزارهای بومی Go است و جایگزین آنها محسوب نمیشود.
#Go #Valgrind #Instrumentation #Profiling #MemoryLeaks #Concurrency #Performance #Debugging
🟣لینک مقاله:
https://golangweekly.com/link/174628/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤3
🔵 عنوان مقاله
Practical Networking Patterns in Go
🟢 خلاصه مقاله:
** این بخش تازه از Go Optimization Guide مجموعهای از ۱۳ راهنما را ارائه میکند که به شکل عملی ساخت اپلیکیشنهای شبکهای مقیاسپذیر با Go را پوشش میدهند. محورهای اصلی شامل دستیابی به «همزمانی بسیار بالا»، الگوهای مدیریت اتصال، کنترل فشار، زمانبندی و لغو عملیات، همراه با بنچمارکگیری واقعگرایانه و عیبیابی مبتنی بر سنجهها، پروفایلینگ و تِرِیسینگ است. همچنین درباره انتخاب و پیکربندی پروتکلهای انتقال، مدیریت خطا، اندازهگیری بافرها و تنظیمات سطح پایین برای پایداری و عملکرد بهتر توضیح میدهد. خروجی نهایی مجموعهای از الگوهای عملی و چکلیستهاست که به تیمها کمک میکند توان عملیاتی را افزایش دهند، تأخیرهای دُم توزیع را کاهش دهند و سرویسهای Go را در مقیاس بهصورت پایدار و شفاف اداره کنند.
#Go #Golang #Networking #Concurrency #Benchmarking #Performance #Scalability #Systems
🟣لینک مقاله:
https://golangweekly.com/link/174636/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Practical Networking Patterns in Go
🟢 خلاصه مقاله:
** این بخش تازه از Go Optimization Guide مجموعهای از ۱۳ راهنما را ارائه میکند که به شکل عملی ساخت اپلیکیشنهای شبکهای مقیاسپذیر با Go را پوشش میدهند. محورهای اصلی شامل دستیابی به «همزمانی بسیار بالا»، الگوهای مدیریت اتصال، کنترل فشار، زمانبندی و لغو عملیات، همراه با بنچمارکگیری واقعگرایانه و عیبیابی مبتنی بر سنجهها، پروفایلینگ و تِرِیسینگ است. همچنین درباره انتخاب و پیکربندی پروتکلهای انتقال، مدیریت خطا، اندازهگیری بافرها و تنظیمات سطح پایین برای پایداری و عملکرد بهتر توضیح میدهد. خروجی نهایی مجموعهای از الگوهای عملی و چکلیستهاست که به تیمها کمک میکند توان عملیاتی را افزایش دهند، تأخیرهای دُم توزیع را کاهش دهند و سرویسهای Go را در مقیاس بهصورت پایدار و شفاف اداره کنند.
#Go #Golang #Networking #Concurrency #Benchmarking #Performance #Scalability #Systems
🟣لینک مقاله:
https://golangweekly.com/link/174636/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
goperf.dev
Practical Networking Patterns in Go - Go Optimization Guide
Patterns and Techniques for Writing High-Performance Applications with Go
❤2
🔵 عنوان مقاله
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
🔵 عنوان مقاله
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
🔵 عنوان مقاله
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
🔵 عنوان مقاله
Do 2.0: Type-Safe Dependency Injection Toolkit
🟢 خلاصه مقاله:
Do 2.0 یک ابزار مدرن برای پیادهسازی الگوی Dependency Injection است که با تکیه بر generics بهجای reflection، یک API کاملاً type-safe ارائه میدهد. این تغییر، خطاها را از زمان اجرا به زمان کامپایل منتقل میکند، عملکرد و زمان راهاندازی را بهبود میدهد و با امکانات IDE مثل تکمیل خودکار و بازآرایی کد سازگارتر است. در Do 2.0 اتصال وابستگیها صریح و قابلردگیری است، بنابراین نگهداشت، آزمونپذیری و اطمینان از درستی گراف وابستگیها سادهتر میشود. برای کاربران فعلی Do، راهنمای ارتقا از نسخه v1 فراهم است و تغییرات کلیدی و نمونهها را برای مهاجرت آسان توضیح میدهد.
#DependencyInjection #TypeSafe #Generics #NoReflection #APIDesign #SoftwareArchitecture #Maintainability #Performance
🟣لینک مقاله:
https://golangweekly.com/link/175066/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Do 2.0: Type-Safe Dependency Injection Toolkit
🟢 خلاصه مقاله:
Do 2.0 یک ابزار مدرن برای پیادهسازی الگوی Dependency Injection است که با تکیه بر generics بهجای reflection، یک API کاملاً type-safe ارائه میدهد. این تغییر، خطاها را از زمان اجرا به زمان کامپایل منتقل میکند، عملکرد و زمان راهاندازی را بهبود میدهد و با امکانات IDE مثل تکمیل خودکار و بازآرایی کد سازگارتر است. در Do 2.0 اتصال وابستگیها صریح و قابلردگیری است، بنابراین نگهداشت، آزمونپذیری و اطمینان از درستی گراف وابستگیها سادهتر میشود. برای کاربران فعلی Do، راهنمای ارتقا از نسخه v1 فراهم است و تغییرات کلیدی و نمونهها را برای مهاجرت آسان توضیح میدهد.
#DependencyInjection #TypeSafe #Generics #NoReflection #APIDesign #SoftwareArchitecture #Maintainability #Performance
🟣لینک مقاله:
https://golangweekly.com/link/175066/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
do.samber.dev
⚙️ do: Type-safe dependency injection for Go | do
A dependency injection toolkit based on Go 1.18+ Generics.
🔥2👍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
🔵 عنوان مقاله
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🎉1🍾1
🔵 عنوان مقاله
Building a Coding Agent in Go from Scratch
🟢 خلاصه مقاله:
این مجموعه سه مطلب عملی برای توسعهدهندگان Go را کنار هم میگذارد: ساخت یک coding agent از صفر در Go، استفاده از Timing Wheels برای انقضای کارآمد ۱۰ میلیون کلید بدون اسکنهای O(n)، و مروری دقیق بر sync شامل Mutex، RWMutex، WaitGroup، Once، Cond و Pool. بخش agent بر معماری ماژولار، هماهنگی goroutine و channel، sandbox امن و حلقه بازخورد برای اجرای کد و بهبود تدریجی تأکید دارد. نوشته Bill Kennedy نشان میدهد چگونه با سطلبندی زمانسنجها و حرکت چرخ، سربار و نوسان تأخیر کاهش مییابد و حتی در مقیاس بزرگ پایدار میماند. در نهایت، مرور sync توصیههای عملی برای انتخاب درست بین primitives و channel، کاهش contention، و ارزیابی با benchmark، pprof و race detector ارائه میکند تا سامانههای Go هم هوشمند و هم سریع باشند.
#Go #Golang #Concurrency #TimingWheels #sync #SystemsProgramming #GoInternals #Performance
🟣لینک مقاله:
https://golangweekly.com/link/175365/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Building a Coding Agent in Go from Scratch
🟢 خلاصه مقاله:
این مجموعه سه مطلب عملی برای توسعهدهندگان Go را کنار هم میگذارد: ساخت یک coding agent از صفر در Go، استفاده از Timing Wheels برای انقضای کارآمد ۱۰ میلیون کلید بدون اسکنهای O(n)، و مروری دقیق بر sync شامل Mutex، RWMutex، WaitGroup، Once، Cond و Pool. بخش agent بر معماری ماژولار، هماهنگی goroutine و channel، sandbox امن و حلقه بازخورد برای اجرای کد و بهبود تدریجی تأکید دارد. نوشته Bill Kennedy نشان میدهد چگونه با سطلبندی زمانسنجها و حرکت چرخ، سربار و نوسان تأخیر کاهش مییابد و حتی در مقیاس بزرگ پایدار میماند. در نهایت، مرور sync توصیههای عملی برای انتخاب درست بین primitives و channel، کاهش contention، و ارزیابی با benchmark، pprof و race detector ارائه میکند تا سامانههای Go هم هوشمند و هم سریع باشند.
#Go #Golang #Concurrency #TimingWheels #sync #SystemsProgramming #GoInternals #Performance
🟣لینک مقاله:
https://golangweekly.com/link/175365/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
YouTube
Building a coding agent from scratch - Bill Kennedy
In this talk, Bill will share how AI agents fundamental work and interact with LLMs to perform basic tasks like listing, reading, and editing files. During the talk, Bill will live code an agent and explain all the parts of the code needed to make this work.…
❤3👍1
🔵 عنوان مقاله
CPU Cache-Friendly Data Structures in Go: 10x Speed with Same Algorithm
🟢 خلاصه مقاله:
** این مقاله نشان میدهد که در Go میتوان بدون تغییر الگوریتم و فقط با بهینهسازی نحوهٔ دسترسی به حافظه، به بهبودهایی تا ۱۰ برابر رسید. ایدهٔ اصلی این است که با بهرهگیری از محلیّت در CPU و نگه داشتن دادههای «داغ» در حافظهٔ پیوسته، تعداد cache miss به شدت کم میشود. راهکارهای کلیدی شامل استفاده از sliceهای پیوسته بهجای ساختارهای پر از pointer، فشردهسازی و چیدمان درست فیلدهای struct، انتخاب آگاهانه بین AoS و SoA، کاهش تخصیصها و استفاده از sync.Pool برای بازاستفادهٔ حافظه، و اجتناب از false sharing در برنامههای همزمان است. اندازهگیری با ابزارهای benchmark و pprof کمک میکند ببینیم گلوگاه واقعاً از کجاست. نتیجهٔ عملی طبق تجربهٔ Serge Skoredin: با حفظ همان منطق، تنها با طراحی cache‑friendly در Go میتوان جهشهای بزرگ کارایی بهدست آورد.
#Go #Golang #CPUCache #Performance #DataStructures #SystemsProgramming #Optimization #LowLatency
🟣لینک مقاله:
https://golangweekly.com/link/175636/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
CPU Cache-Friendly Data Structures in Go: 10x Speed with Same Algorithm
🟢 خلاصه مقاله:
** این مقاله نشان میدهد که در Go میتوان بدون تغییر الگوریتم و فقط با بهینهسازی نحوهٔ دسترسی به حافظه، به بهبودهایی تا ۱۰ برابر رسید. ایدهٔ اصلی این است که با بهرهگیری از محلیّت در CPU و نگه داشتن دادههای «داغ» در حافظهٔ پیوسته، تعداد cache miss به شدت کم میشود. راهکارهای کلیدی شامل استفاده از sliceهای پیوسته بهجای ساختارهای پر از pointer، فشردهسازی و چیدمان درست فیلدهای struct، انتخاب آگاهانه بین AoS و SoA، کاهش تخصیصها و استفاده از sync.Pool برای بازاستفادهٔ حافظه، و اجتناب از false sharing در برنامههای همزمان است. اندازهگیری با ابزارهای benchmark و pprof کمک میکند ببینیم گلوگاه واقعاً از کجاست. نتیجهٔ عملی طبق تجربهٔ Serge Skoredin: با حفظ همان منطق، تنها با طراحی cache‑friendly در Go میتوان جهشهای بزرگ کارایی بهدست آورد.
#Go #Golang #CPUCache #Performance #DataStructures #SystemsProgramming #Optimization #LowLatency
🟣لینک مقاله:
https://golangweekly.com/link/175636/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
skoredin.pro
CPU Cache-Friendly Data Structures in Go: 10x Speed
False sharing killed our performance. Data-oriented design saved it.
❤1🔥1
🔵 عنوان مقاله
How Slow is Channel-Based Iteration?
🟢 خلاصه مقاله:
این مقاله پرسش «تکرار مبتنی بر channel در Go چقدر کند است؟» را با یک مثال عملی بررسی میکند. تیم Dolt سه الگو را مقایسه کرده است: دو رویکرد مبتنی بر channel و یک روش iterator کشیدنی با iter.Pull. نتیجه کلی این است که هرچند channelها برای همزمانی، مدیریت فشار برگشتی و جداسازی تولیدکننده/مصرفکننده عالیاند، اما در حلقههای محاسباتیِ حساس به کارایی، سربار همگامسازی، زمانبندی goroutine و تخصیصها محسوس میشود. در مقابل، iter.Pull (و حلقههای ساده روی دادههای خطی) معمولاً سبکتر و بهینهترند. توصیه نهایی: وقتی به همزمانی واقعی نیاز دارید از channel استفاده کنید؛ برای مسیرهای داغ که فقط پیمایش میخواهند، سراغ iterator کشیدنی یا حلقههای ساده بروید.
#Go #Golang #Channels #Iteration #Performance #Benchmarking #Concurrency #Dolt
🟣لینک مقاله:
https://golangweekly.com/link/175626/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How Slow is Channel-Based Iteration?
🟢 خلاصه مقاله:
این مقاله پرسش «تکرار مبتنی بر channel در Go چقدر کند است؟» را با یک مثال عملی بررسی میکند. تیم Dolt سه الگو را مقایسه کرده است: دو رویکرد مبتنی بر channel و یک روش iterator کشیدنی با iter.Pull. نتیجه کلی این است که هرچند channelها برای همزمانی، مدیریت فشار برگشتی و جداسازی تولیدکننده/مصرفکننده عالیاند، اما در حلقههای محاسباتیِ حساس به کارایی، سربار همگامسازی، زمانبندی goroutine و تخصیصها محسوس میشود. در مقابل، iter.Pull (و حلقههای ساده روی دادههای خطی) معمولاً سبکتر و بهینهترند. توصیه نهایی: وقتی به همزمانی واقعی نیاز دارید از channel استفاده کنید؛ برای مسیرهای داغ که فقط پیمایش میخواهند، سراغ iterator کشیدنی یا حلقههای ساده بروید.
#Go #Golang #Channels #Iteration #Performance #Benchmarking #Concurrency #Dolt
🟣لینک مقاله:
https://golangweekly.com/link/175626/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Dolthub
How slow is channel-based iteration?
We benchmarked channel-based iterators v. those provided by the iter package and share the results.
❤1👍1🔥1
🔵 عنوان مقاله
The Speed of Random Number Generators
🟢 خلاصه مقاله:
در این مقاله، Daniel سرعت گزینههای رایج تولید اعداد تصادفی در Go را مقایسه میکند. او نشان میدهد که math/rand/v2 با الگوریتم PCG در سناریوهای غیرامنیتی سریعترین گزینه است و از نسخه قدیمیتر math/rand عملکرد بهتری دارد، در حالی که crypto/rand بهدلیل تمرکز بر امنیت بهطور قابلتوجهی کندتر است. جمعبندی عملی: برای کارهای غیررمزنگاری که سرعت و قابلیت بازتولید مهماند، از math/rand/v2 (PCG) استفاده کنید؛ اما برای مقاصد امنیتی، با وجود هزینهی عملکرد، crypto/rand انتخاب درست است.
#Go #Golang #RandomNumberGeneration #Performance #Benchmark #PCG #mathrand #cryptorand
🟣لینک مقاله:
https://golangweekly.com/link/175977/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
The Speed of Random Number Generators
🟢 خلاصه مقاله:
در این مقاله، Daniel سرعت گزینههای رایج تولید اعداد تصادفی در Go را مقایسه میکند. او نشان میدهد که math/rand/v2 با الگوریتم PCG در سناریوهای غیرامنیتی سریعترین گزینه است و از نسخه قدیمیتر math/rand عملکرد بهتری دارد، در حالی که crypto/rand بهدلیل تمرکز بر امنیت بهطور قابلتوجهی کندتر است. جمعبندی عملی: برای کارهای غیررمزنگاری که سرعت و قابلیت بازتولید مهماند، از math/rand/v2 (PCG) استفاده کنید؛ اما برای مقاصد امنیتی، با وجود هزینهی عملکرد، crypto/rand انتخاب درست است.
#Go #Golang #RandomNumberGeneration #Performance #Benchmark #PCG #mathrand #cryptorand
🟣لینک مقاله:
https://golangweekly.com/link/175977/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Daniel Lemire's blog
Speed of random number generators in Go
We often need to generate random numbers in software. We need them for games, simulations, testing, and so forth. In many of these cases, we would like to use the fastest generator we can find, as long as it is reasonably random-looking. In some instances…
👍1