برنامه نویسی

بهینه سازی عملکرد زنگ زدگی با jemalloc

پوشش

jemalloc چیست؟

Jemalloc یک تخصیص دهنده حافظه مدرن است که در ابتدا توسط جیسون ایوانز برای FreeBSD ساخته شده است. در مقایسه با سنتی malloc، Jemalloc از ابتدا برای کاهش تکه تکه شدن حافظه و تقویت عملکرد در برنامه های چند رشته ای طراحی شده است. این امر از طریق مدیریت حافظه ریز دانه و مکانیسم های ذخیره سازی نخ به تخصیص حافظه سریع و کارآمد می رسد.

ویژگی های اصلی Jemalloc شامل موارد زیر است:

  • پردازش همزمان کارآمد: با تهیه حافظه های حافظه مستقل برای هر موضوع ، اختلاف بین موضوعات را کاهش می دهد.
  • تکه تکه شدن حافظه را کاهش داد: استراتژی تخصیص حافظه با دقت طراحی شده ، استفاده از حافظه را بهبود می بخشد.
  • پشتیبانی متقابل پلتفرم: از چندین سیستم عامل از جمله لینوکس ، مکوس و ویندوز پشتیبانی می کند.

مالوک سنتی

  • تعریف: malloc ابتدایی ترین عملکرد تخصیص حافظه است که یک روش ساده برای تخصیص یک بلوک از حافظه از یک اندازه مشخص فراهم می کند. این بخشی از کتابخانه استاندارد C است و به طور گسترده در برنامه های C و C ++ استفاده می شود.
  • چگونه کار می کند: وقتی یک برنامه تماس می گیرد malloc برای درخواست حافظه ، malloc جستجو برای یک منطقه حافظه مداوم به اندازه کافی بزرگ در فضای پشته فرآیند برای اختصاص به برنامه. اگر درخواست موفقیت آمیز باشد ، malloc یک اشاره گر را به حافظه اختصاص داده شده برمی گرداند. در صورت عدم موفقیت ، برمی گردد NULLبشر
  • خصوصیات: اجرای malloc تمرکز بر کلیت به جای بهینه سازی عملکرد در سناریوهای خاص. در نتیجه ، ممکن است تنگناهای عملکردی را در کار با تخصیص های کوچک یا در محیط های چند رشته ای مانند تکه تکه شدن حافظه یا مشاجره قفل نشان دهد.

جمالاک

  • تعریف: Jemalloc یک تخصیص دهنده حافظه مدرن است که توسط جیسون ایوانز ساخته شده است ، با هدف ارائه مدیریت حافظه با کارایی بالا و کم کاری. در ابتدا برای سیستم عامل FreeBSD طراحی شده است ، اکنون به طور گسترده در سیستم های دیگر و پروژه های مهم مانند محیط تولید فیس بوک و کتابخانه استاندارد زبان برنامه نویسی زنگ استفاده می شود (اگرچه بعداً Rust به طور پیش فرض به استفاده از اختصاص دهنده سیستم بازگشت.
  • چگونه کار می کند: Jemalloc از استراتژی های مختلفی برای بهینه سازی تخصیص حافظه و احیای حافظه استفاده می کند ، مانند استفاده از کلاس های اندازه برای مدیریت تخصیص در اندازه های مختلف ، حافظه پنهان نخ برای کاهش مشاجره قفل ، و تأخیر در راه اندازی مجدد و استراتژی های تقسیم بندی برای به حداقل رساندن تکه تکه شدن حافظه.
  • خصوصیات: Jemalloc برای تقویت عملکرد برنامه های چند رشته ای و کاهش تکه تکه شدن حافظه طراحی شده است. استراتژی های مدیریت حافظه ریز تنظیم شده و ساختارهای بهینه شده داده ، آن را برای سناریوهایی که شامل رسیدگی به حجم زیادی از عملیات حافظه همزمان است ، مناسب می کند.

مقایسه

  • عمل: Jemalloc به طور معمول در برنامه های بسیار همزمان و تخصیص حافظه ، به ویژه در کاهش تکه تکه شدن حافظه و بهبود کارآیی تخصیص ، عملکرد بهتری دارد.
  • سناریوهای استفاده: در حالی که malloc در تمام محیط های استاندارد C موجود است ، توسعه دهندگان ممکن است Jemalloc یا سایر تخصیص دهنده حافظه بهینه شده را برای سناریوهایی که نیاز به عملکرد بالاتر دارند انتخاب کنند.
  • سازگاری: jemalloc می تواند به عنوان جایگزینی مستقیم برای استفاده شود mallocو در بیشتر موارد ، کد موجود برای بهره مندی از مزایای عملکرد آن نیازی به اصلاح ندارد.

چرا از jemalloc در زنگ زدگی استفاده می کنیم؟

اگرچه کتابخانه استاندارد Rust به طور پیش فرض از نسخه 1.32 به استفاده از تخصیص دهنده سیستم بازگردد ، Jemalloc در سناریوهای برنامه با کارایی بالا انتخابی ترجیح داده می شود. این امر به ویژه در مورد برنامه های مربوط به عملیات گسترده حافظه همزمان ، مانند سرورهای وب با کنفرانس بالا ، سیستم های پایگاه داده و فن آوری های blockchain صادق است. استفاده از Jemalloc می تواند عملکرد و بهره وری استفاده از حافظه را در این زمینه ها به میزان قابل توجهی افزایش دهد.

با استفاده از jemalloc در زنگ زدگی

برای استفاده از jemalloc در یک پروژه زنگ زدگی ، می توانید اضافه کنید jemallocator جعبه به عنوان یک وابستگی. در اینجا نحوه پیکربندی آن آورده شده است:

1. وابستگی ها را اضافه کنید

ابتدا ، اضافه کنید jemallocator جعبه در خود Cargo.toml پرونده:

[dependencies]
jemallocator = "0.3"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. تخصیص دهنده جهانی را پیکربندی کنید

در مرحله بعد ، Jemalloc را به عنوان تخصیص دهنده جهانی در نقطه ورود برنامه زنگ زدگی خود تنظیم کنید (مانند main.rs یا پرونده اصلی کتابخانه شما lib.rs):

extern crate jemallocator;

#[global_allocator]
static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این کد Jemalloc را به عنوان تخصیص دهنده حافظه جهانی اعلام می کند. از طریق این روش ، تمام تخصیص حافظه در برنامه زنگ زدگی توسط Jemalloc انجام می شود.

3. برنامه خود را کامپایل و اجرا کنید

پس از اتمام پیکربندی ، برنامه زنگ زدگی خود را طبق معمول کامپایل و اجرا کنید. اگر همه چیز به درستی تنظیم شود ، برنامه شما اکنون از Jemalloc به عنوان تخصیص حافظه آن استفاده می کند.

پایان

به طور کلی ، Jemalloc یک روش مدیریت حافظه کارآمد ، به ویژه برای برنامه های زنگ زدگی که نیاز به همزمانی بالا و راندمان حافظه بالا دارند ، ارائه می دهد. اگرچه پیش فرض زنگ زدگی برای استفاده از تخصیص دهنده سیستم است ، اما جابجایی به سناریوها با تقاضای عملکرد خاص می تواند باعث بهبود عملکرد قابل توجهی در برنامه های زنگ زدگی ، مانند خدمات باطن و پروژه های blockchain شود.


ما Leapcell ، انتخاب برتر شما برای میزبانی پروژه های زنگ زدگی هستیم.

جهش

Leapcell بستر سرور نسل بعدی برای میزبانی وب ، کارهای ASYNC و REDIS است:

پشتیبانی چند زبانی

  • با node.js ، پایتون ، برو یا زنگ زدگی توسعه دهید.

پروژه های نامحدود را به صورت رایگان مستقر کنید

  • فقط برای استفاده پرداخت کنید – بدون درخواست ، بدون هزینه.

راندمان هزینه بی نظیر

  • پرداخت به عنوان شما بدون هیچ گونه هزینه بیکار.
  • مثال: 25 دلار از درخواست های 6.94M در زمان پاسخ متوسط ​​60ms پشتیبانی می کند.

تجربه توسعه دهنده ساده

  • UI بصری برای راه اندازی بی دردسر.
  • خطوط لوله CI/CD کاملاً خودکار و ادغام GITOPS.
  • معیارهای زمان واقعی و ورود به سیستم برای بینش های عملی.

مقیاس پذیری بی دردسر و عملکرد بالا

  • مقیاس خودکار برای رسیدگی به همزمانی بالا با سهولت.
  • صفر سربار عملیاتی – فقط روی ساختمان تمرکز کنید.

در اسناد بیشتر کاوش کنید!

Leapcell را امتحان کنید

ما را در X دنبال کنید: LeapCellHQ


در وبلاگ ما بخوانید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا