بالاخره! حذف GIL از پایتون

زبان پایتون نخستین بار در یک دوره زمانی که پردازشگرهای چند هسته‌ای هنوز در دسترس نبودند، به دنیای برنامه‌نویسی معرفی شد. در آن دوران، مانند بسیاری از زبان‌های برنامه‌نویسی دیگر، پایتون از رشته‌ها (Thread) برای پشتیبانی از پردازش همزمان استفاده می‌کرد. به منظور سهولت در نگه‌داشتن ساختار برنامه‌نویسی و جلوگیری از مشکلات متداول در تعامل رشته‌ها، پایتون از مفهوم GIL (Global Interpreter Lock) استفاده می‌کرد که امکان به اشتراک گذاری متغیرها را میان رشته‌های مختلف فراهم می‌نمود. این مفهوم، در زمانی که پیاده‌سازی آن در زبان‌های سطح پایین‌تر مانند زبان C با چالش‌های زیادی همراه بود، به عنوان یک برتری برای پایتون در نظر گرفته می‌شد.

Python GIL structure

با پیشرفت سخت‌افزارها و ظهور پردازشگرهای چند هسته‌ای و مزایای قابل توجهی که برای پردازش‌های سنگین به همراه داشتند، زبان‌های برنامه‌نویسی، به ویژه زبان‌های جدید، به سوی پشتیبانی از پردازش‌های موازی با استفاده از پردازشگرهای فیزیکی روی آوردند. در این میان، پایتون نیز جزء استثناها نبود. تلاش‌های بسیاری برای حذف GIL از پایتون و تغییر ساختار مدیریت حافظه و به اشتراک گذاری متغیرها بین پردازشگرهای مختلف انجام شد. اکثر این تلاش‌ها در پردازش‌های چند هسته‌ای به نتیجه مطلوبی منجر شدند، اما در پردازش‌های تک هسته‌ای، بهبود قابل توجهی ایجاد نکردند.

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

تغییرات اعمال شده در نسخه ۳.۱۲ به صورت آزمایشی معرفی شدند و در نسخه ۳.۱۳ به عنوان یک قابلیت پیش‌فرض و رسمی در هسته اصلی پایتون جای خواهند گرفت.