❎This document outlines best practices for writing high-performance Go code.
❎مقالهای در مورد بهترین کارها برای نوشتن یک کد با performance بالا برای زبان برنامهنویسی Go
#golang #go #performance #optimization
https://github.com/dgryski/go-perfbook
☄ @gopher_academy
❎مقالهای در مورد بهترین کارها برای نوشتن یک کد با performance بالا برای زبان برنامهنویسی Go
#golang #go #performance #optimization
https://github.com/dgryski/go-perfbook
☄ @gopher_academy
GitHub
GitHub - dgryski/go-perfbook: Thoughts on Go performance optimization
Thoughts on Go performance optimization. Contribute to dgryski/go-perfbook development by creating an account on GitHub.
🔵Using regexp.Match or related in a loop
🔴 #Performance
🟢Compile parses a regular expression and returns, if successful, a Regexp object that can be used to match against text.
When matching in a loop, use regexp.Compile instead.
➖➖➖➖➖➖➖➖➖
🕊 @gopher_academy
🔴 #Performance
🟢Compile parses a regular expression and returns, if successful, a Regexp object that can be used to match against text.
When matching in a loop, use regexp.Compile instead.
➖➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍5
🔵Function params involve heavy amount of copying
🟢When a param big in size (more than 80 bytes) is passed to another function, it is better to pass a pointer to the value around, rather than the value itself.
#Performance
➖➖➖➖➖➖➖➖➖
🕊 @gopher_academy
🟢When a param big in size (more than 80 bytes) is passed to another function, it is better to pass a pointer to the value around, rather than the value itself.
#Performance
➖➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍9❤1🔥1
🔵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