خبر فوریامروز

پایتون بدون قفل سراسری No-GIL و کامپایلر JIT

سد تاریخی اجرای چندرشته‌ای در پایتون شکست؛ حذف قفل GIL و ادغام کامپایلر JIT، پایتون را به غول همزمانی بومی بدون سربار در عصر کلاسترهای مدرن تبدیل کرده است.

پایتون بدون قفل سراسری No-GIL
پایتون بدون قفل سراسری No-GIL و کامپایلر JIT — عکس: آرشیو ماگ بیت
خلاصه در یک نگاه
  • تحلیل جامع و کالبدشکافی عمیق معماری مدرن CPython امروزه با پیاده‌سازی رسمی و پایدار نسخه بدون قفل سراسری (Free-Threaded No-GIL) بر پایه PEP 703 و کامپایلر JIT بهینه‌ساز تخصصی. بررسی سازوکار شمارش ارجاع امن نخی (Thread-Safe Reference Counting)، تخصیص‌دهنده حافظه سریع mimalloc، اشیای جاویدان (Immortal Objects)، حذف سربارهای سنگین حافظه در multiprocessing، اجرای هم‌زمان نخ‌های هوش مصنوعی در PyTorch و NumPy با مقیاس‌پذیری خطی بر روی پردازنده‌های ۶۴ هسته‌ای، و آینده توسعه نرم‌افزارهای مدرن سطح سیستم با پایتون.
  • بررسی جامع ابعاد فنی و کاربردی توسط تحریریه ماگ بیت.
  • پیش‌بینی اثرات کوتاه‌مدت و بلندمدت بر اکوسیستم فناوری.

تراژدی قفل سراسری مفسر (GIL)؛ چگونه پایتون سه دهه در بند تک‌رشته‌ای ماند؟

از ابتدای طراحی زبان برنامه‌نویسی پایتون توسط خیدو فان روسوم در اوایل دهه ۱۹۹۰، مکانیسم مدیریت حافظه بر پایه سیستم ساده و در عین حال موثر شمارش ارجاع (Reference Counting) بنا نهاده شد؛ هر زمان که متغیری به یک شیء اشاره می‌کرد، شمارنده آن افزایش می‌یافت و با پایان دامنه، با رسیدن شمارنده به صفر، حافظه بلافاصله آزاد می‌شد. اما برای جلوگیری از تخریب حافظه حین دسترسی هم‌زمان چند نخ پردازشی، یک سازوکار کنترلی فراگیر به نام قفل سراسری مفسر (Global Interpreter Lock یا GIL) تعریف شد.

این قفل مانع از آن می‌شد که حتی بر روی قوی‌ترین سرورهای مجهز به ده‌ها هسته فیزیکی، بیش از یک نخ پایتون در هر لحظه کدهای بایت‌کد را اجرا کند. با افزایش نجومی تعداد هسته‌های پردازنده‌ها و فراگیری بارهای کاری هوش مصنوعی و کلان‌داده، این محدودیت به بزرگ‌ترین گلوگاه صنعت تبدیل شد. مهندسان ناچار بودند برای موازی‌سازی واقعی از ماژول multiprocessing استفاده کنند؛ راهکاری که مستلزم کپی‌کردن کل فضای آدرس پروسس، سربار تبادل داده بین پروسسی (IPC) و هدررفت شدید حافظه رم بود.

همان‌گونه که در بررسی پایگاه‌های داده تعبیه‌شده توزیع‌شده با SQLite و Wasm امروزه تحلیل شد، معماری‌های مدرن نرم‌افزار خواستار پردازش بلادرنگ درون حافظه مشترک با کمترین سربار ایزولاسیون هستند. امروزه پایتون با اراده‌ای تاریخی سرانجام این طلسم ۳۰ ساله را شکست.

ستون‌های مهندسی PEP 703؛ کالبدشکافی حذف GIL بدون افت کارایی تک‌نخی

حذف GIL چالش مهندسی عظیمی بود؛ زیرا تلاش‌های مکرر در دهه‌های گذشته نشان داده بودند که افزودن قفل‌های جزئی ریزدانه (Fine-Grained Locks) به اشیا باعث افت ۳۰ تا ۵۰ درصدی سرعت اجرای کدهای تک‌رشته‌ای می‌شود. شاهکار تیم توسعه CPython امروزه بر سه ستون فنی نوآورانه استوار است: تخصیص‌دهنده حافظه mimalloc، سیستم ارجاع تعویق‌افتاده (Biased / Deferred Reference Counting)، و اشیای جاویدان (Immortal Objects).

تخصیص‌دهنده حافظه محلی mimalloc (توسعه‌یافته در مایکروسافت) به هر نخ پردازشی اجازه می‌دهد پشته‌های حافظه اختصاصی خود را مدیریت کند و رقابت بر سر تصاحب منابع حافظه سراسری را به صفر برساند. برای اشیایی که به ندرت تغییر می‌کنند یا در طول کل چرخه حیات برنامه پایدار هستند (مانند اعداد صحیح پرکاربرد، کلمات کلیدی، انواع داده‌های توکار و توابع ماژول‌ها)، مفهوم «اشیای جاویدان» به کار گرفته شده است؛ شمارشگر ارجاع این اشیا به طور دائم غیرفعال می‌شود تا هیچ نخی نیاز به نوشتن روی حافظه مشترک آن‌ها نداشته باشد.

علاوه بر این، برای اشیای محلی که عمدتاً توسط یک نخ مشخص ایجاد و مصرف می‌شوند، شمارش ارجاع به صورت غیراتمیک و با حداکثر سرعت انجام می‌گیرد و تنها در صورتی که شیء به نخ دیگری منتقل شود، عملیات اتمیک همگام‌سازی فعال می‌گردد. این ظرافت در معماری سبب شده است که افت عملکرد تک‌نخی در پایتون جدید به کمتر از ۳ درصد کاهش یابد.

معماری مفسر بدون قفل سراسری No-GIL و کامپایلر تایر دو JIT در اجرای موازی بارهای کاری هوش مصنوعی پایتون دوران کنونی
نمودار مقایسه توان عملیاتی همزمانی چندرشته‌ای واقعی با اشیای جاویدان در برابر سربار فرآیندهای سنگین Multiprocessing در پایتون سنتی

هم‌افزایی با کامپایلر JIT تایر دو؛ تبدیل بایت‌کد به کدهای ماشین بهینه‌شده

دومین بال پرواز پایتون امروزه استقرار نهایی کامپایلر زمان اجرا (Just-In-Time Compiler) با معماری تایر دو (Tier 2 Specialization) است. مفسر پایتون در حین اجرای اولیه کدها، جریان‌های داغ حلقه (Hot Loops) و انواع متغیرهای پرتکرار را شناسایی می‌کند. به محض اثبات پایداری نوع داده‌ها در یک بلاک محاسباتی، کامپایلر سبک JIT بایت‌کدهای سنتی را به میکرواپریشن‌های بهینه‌شده (Micro-ops) تبدیل کرده و سپس کدهای باینری بومی پردازنده را مستقیماً در حافظه تولید می‌نماید.

این کامپایلر بومی با استفاده از اطلاعات نوع داده‌های قطعی، لایه‌های فراخوانی توابع را حذف کرده (Function Inlining) و محاسبات ریاضی را به دستورالعمل‌های برداری SIMD پردازنده مپ می‌کند. ترکیب کامپایلر JIT با اجرای آزاد چندرشته‌ای (Free-Threading) به این معناست که کدهای سنگین پردازش متن، پیش‌پردازش تانسورها و اعتبارسنجی داده‌ها اکنون می‌توانند با سرعتی همپای زبان‌های کامپایلری مانند Go و Java بر روی تمام هسته‌های سرور به طور هم‌زمان شلیک شوند.

همان‌طور که در واکاوی سیستم‌های برنامه‌نویسی مدرن Rust و Zig و کدهای کرنل AI تشریح شد، پایتون به لطف این جهش زیرساختی دیگر صرفاً یک لایه زبانی چسباننده (Glue Code) برای کتابخانه‌های C++ نیست، بلکه خودش توانایی اجرای منطق‌های پیچیده توزیع‌شده با کارایی فوق‌العاده را دارا شده است.

پیامدهای استراتژیک برای اکوسیستم هوش مصنوعی، PyTorch و مهندسی داده

تاثیر تجاری پایتون بدون قفل امروزه بر کلاسترهای هوش مصنوعی عمیق و ملموس است. در جریان آموزش مدل‌های یادگیری عمیق، پردازنده‌های گرافیکی گران‌قیمت اغلب به دلیل کندی خطوط لوله بارگذاری داده‌ها (DataLoaders) در پایتون دچار بیکاری لحظه‌ای (GPU Starvation) می‌شدند. برای دور زدن این مشکل، مهندسان از چندین پروسس موازی با کپی‌های حجیم رم استفاده می‌کردند که مکرراً به خطاهای OOM منجر می‌شد.

با پایتون Free-Threaded، پکیج‌های پیشگام نظیر PyTorch 2.6+، NumPy و Polars امکان به اشتراک‌گذاری مستقیم تانسورهای آرایه‌ای در حافظه مشترک را بدون یک بایت کپی تکراری پیدا کرده‌اند. ده‌ها نخ پایتون اکنون می‌توانند داده‌های تصویر، صدا و متن را به صورت هم‌زمان خوانده، نرمال‌سازی کرده و با مصرف حافظه رم تا ۶۰ درصد کمتر مستقیماً به کارت‌های گرافیکی تزریق نمایند.

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

این مطلب را با دوستانتان به اشتراک بگذارید
م
نوشته‌ی
منا پدرام

روزنامه‌نگار حوزه‌ی فناوری؛ علاقه‌مند به روایت آدم‌ها و تغییراتی که فناوری در زندگی روزمره ایجاد می‌کند.

همه‌ی مطالب
مطالب پیشنهادی ماگ بیت

بیشتر از فناوری

مشاهده همه