Forwarded from Code Module | کد ماژول (genix)
مدیریت کارآمد حافظه در برنامه های بزرگ مقیاس جاوا اسکریپتی، برای اطمینان از عملکرد بهینه، جلوگیری از نشت حافظه و حفظ مقیاس پذیری ضروری هست. این مقاله استراتژیها و مثالهای کدی رو بررسی میکنه تا به شما در مدیریت کارآمد حافظه و بهینهسازی پروژههاتون کمک کنه.
🔗 Link Article
#javascript #memory
@CodeModule
🔗 Link Article
#javascript #memory
@CodeModule
DEV Community
JavaScript Memory Management and Optimization Techniques for Large-Scale Applications
Efficient memory management is essential for large-scale JavaScript applications to ensure optimal...
Forwarded from PhiloLearn | فیلولرن
مدیریت حافظه یکی از مهمترین قسمتهای سیستم عامل هستش که مستقیما روی پرفورمنس سیستم تاثیر میذاره. سیستم عامل وظیفه داره حافظه فیزیکی و مجازی رو بین پروسسها تقسیم کنه و ازشون محافظت کنه.
توی سیستمهای مدرن، حافظه به صورت سگمنت و پیج مدیریت میشه. هر پیج معمولا ۴ کیلوبایت هستش و MMU (Memory Management Unit) مسئول ترجمه آدرسهای مجازی به فیزیکی هستش. این کار با کمک TLB یا Translation Lookaside Buffer انجام میشه که یه کش سختافزاری برای نگهداری آدرسهای پرکاربرد هستش.
وقتی یه پروسس لانچ میشه، سیستم عامل براش یه فضای آدرس مجازی میسازه که شامل چند تا سگمنت هستش: کد (text)، دیتای initialize شده، دیتای initialize نشده (BSS)، هیپ و استک. هر کدوم از این سگمنتها پرمیشنهای خاص خودشون رو دارن. مثلا سگمنت کد فقط read-only هستش تا از اجرای کد مخرب جلوگیری بشه.
سیستم عامل از تکنیکهای مختلفی مثل demand paging استفاده میکنه. با این تکنیک، پیجها فقط موقعی که بهشون نیاز هست به حافظه فیزیکی لود میشن. اگه پیجی که پروسس میخواد توی رم نباشه، page fault رخ میده و سیستم عامل اون پیج رو از دیسک به رم میاره.
برای مدیریت بهتر حافظه، سیستم عامل از الگوریتمهای page replacement استفاده میکنه. یکی از معروفترینهاشون LRU (Least Recently Used) هستش که پیجهایی که مدت زیادی استفاده نشدن رو از رم میندازه بیرون. توی لینوکس از الگوریتمهای پیچیدهتری مثل CLOCK و یا نسخههای بهبود یافته LRU استفاده میشه.
مموری منیجمنت مدرن از تکنیکهای دیگهای مثل memory mapping و copy-on-write هم استفاده میکنه. با memory mapping میشه فایلها رو مستقیم به حافظه مپ کرد و با copy-on-write میشه از کپی کردن غیرضروری دیتا جلوگیری کرد. این تکنیکها توی fork کردن پروسسها خیلی کاربرد دارن.
توی سیستمهای مدرن، مموری منیجمنت از NUMA (Non-Uniform Memory Access) هم پشتیبانی میکنه که باعث میشه پرفورمنس روی سیستمهای چند پردازندهای بهتر بشه. توی این آرکیتکچر، زمان دسترسی به حافظه بستگی به لوکیشن فیزیکی پردازنده و حافظه داره.
#Linux #OS #Memory_Management
@PhiloLearn
توی سیستمهای مدرن، حافظه به صورت سگمنت و پیج مدیریت میشه. هر پیج معمولا ۴ کیلوبایت هستش و MMU (Memory Management Unit) مسئول ترجمه آدرسهای مجازی به فیزیکی هستش. این کار با کمک TLB یا Translation Lookaside Buffer انجام میشه که یه کش سختافزاری برای نگهداری آدرسهای پرکاربرد هستش.
وقتی یه پروسس لانچ میشه، سیستم عامل براش یه فضای آدرس مجازی میسازه که شامل چند تا سگمنت هستش: کد (text)، دیتای initialize شده، دیتای initialize نشده (BSS)، هیپ و استک. هر کدوم از این سگمنتها پرمیشنهای خاص خودشون رو دارن. مثلا سگمنت کد فقط read-only هستش تا از اجرای کد مخرب جلوگیری بشه.
سیستم عامل از تکنیکهای مختلفی مثل demand paging استفاده میکنه. با این تکنیک، پیجها فقط موقعی که بهشون نیاز هست به حافظه فیزیکی لود میشن. اگه پیجی که پروسس میخواد توی رم نباشه، page fault رخ میده و سیستم عامل اون پیج رو از دیسک به رم میاره.
برای مدیریت بهتر حافظه، سیستم عامل از الگوریتمهای page replacement استفاده میکنه. یکی از معروفترینهاشون LRU (Least Recently Used) هستش که پیجهایی که مدت زیادی استفاده نشدن رو از رم میندازه بیرون. توی لینوکس از الگوریتمهای پیچیدهتری مثل CLOCK و یا نسخههای بهبود یافته LRU استفاده میشه.
مموری منیجمنت مدرن از تکنیکهای دیگهای مثل memory mapping و copy-on-write هم استفاده میکنه. با memory mapping میشه فایلها رو مستقیم به حافظه مپ کرد و با copy-on-write میشه از کپی کردن غیرضروری دیتا جلوگیری کرد. این تکنیکها توی fork کردن پروسسها خیلی کاربرد دارن.
توی سیستمهای مدرن، مموری منیجمنت از NUMA (Non-Uniform Memory Access) هم پشتیبانی میکنه که باعث میشه پرفورمنس روی سیستمهای چند پردازندهای بهتر بشه. توی این آرکیتکچر، زمان دسترسی به حافظه بستگی به لوکیشن فیزیکی پردازنده و حافظه داره.
#Linux #OS #Memory_Management
@PhiloLearn
Forwarded from Gopher Academy
🔵 عنوان مقاله
How We Saved 70% CPU and 60% Memory in Refinery’s Go Code
🟢 خلاصه مقاله:
**تیم Refinery روی یک سرویس مهم مبتنی بر Go با مصرف بالای CPU و Memory کار میکرد و با پروفایلینگ دقیق (pprof، tracing و بنچمارکهای انتهابهانتها) گلوگاههای واقعی را پیدا کرد. بیشترین صرفهجویی با حذف کارهای غیرضروری بهدست آمد: حذف پردازشها و serialization تکراری، دوری از reflection در مسیرهای داغ، جایگزینی JSON در hot path با دسترسی مستقیم/کدگذاری ساده، پیشاختصاص slices/maps و بازاستفاده از بافرها برای کاهش allocation و فشار GC. در همروندی، بهجای goroutineهای بدونمهار، از worker poolهای محدود و backpressure استفاده شد، کارها batch و دادهها تا حد امکان stream شدند تا قفلزنی و جابهجایی زمینه کاهش یابد. همچنین چند حلقه O(n^2) با ایندکسگذاری مبتنی بر map/set جایگزین شد، نتایج گران با cache کردن تکرار نشد و الگوهای I/O با خواندن/نوشتن تجمیعی بهینه شدند. در نهایت با تکیه بر allocationهای روی stack، استفاده از sync.Pool و روشهای zero-copy، نیاز به GC پایین آمد. نتیجه: حدود 70% کاهش مصرف CPU و 60% کاهش Memory همراه با بهبود تاخیرهای p95/p99. درس کلیدی: بهینهسازی اغلب یعنی کمتر کار کردن—اندازهگیری کن، کار زائد را حذف کن و سادهسازی را تکرار کن.
#Go #Golang #Performance #Profiling #CPU #Memory #Optimization #pprof
🟣لینک مقاله:
https://golangweekly.com/link/176624/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How We Saved 70% CPU and 60% Memory in Refinery’s Go Code
🟢 خلاصه مقاله:
**تیم Refinery روی یک سرویس مهم مبتنی بر Go با مصرف بالای CPU و Memory کار میکرد و با پروفایلینگ دقیق (pprof، tracing و بنچمارکهای انتهابهانتها) گلوگاههای واقعی را پیدا کرد. بیشترین صرفهجویی با حذف کارهای غیرضروری بهدست آمد: حذف پردازشها و serialization تکراری، دوری از reflection در مسیرهای داغ، جایگزینی JSON در hot path با دسترسی مستقیم/کدگذاری ساده، پیشاختصاص slices/maps و بازاستفاده از بافرها برای کاهش allocation و فشار GC. در همروندی، بهجای goroutineهای بدونمهار، از worker poolهای محدود و backpressure استفاده شد، کارها batch و دادهها تا حد امکان stream شدند تا قفلزنی و جابهجایی زمینه کاهش یابد. همچنین چند حلقه O(n^2) با ایندکسگذاری مبتنی بر map/set جایگزین شد، نتایج گران با cache کردن تکرار نشد و الگوهای I/O با خواندن/نوشتن تجمیعی بهینه شدند. در نهایت با تکیه بر allocationهای روی stack، استفاده از sync.Pool و روشهای zero-copy، نیاز به GC پایین آمد. نتیجه: حدود 70% کاهش مصرف CPU و 60% کاهش Memory همراه با بهبود تاخیرهای p95/p99. درس کلیدی: بهینهسازی اغلب یعنی کمتر کار کردن—اندازهگیری کن، کار زائد را حذف کن و سادهسازی را تکرار کن.
#Go #Golang #Performance #Profiling #CPU #Memory #Optimization #pprof
🟣لینک مقاله:
https://golangweekly.com/link/176624/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Honeycomb
How We Saved 70% of CPU and 60% of Memory in Refinery’s Go Code, No Rust Required.
We've just released Refinery 3. 0 , a performance-focused update which significantly improves Refinery's CPU and memory efficiency.