قفل مفسر سراسری پایتون (GIL) چیست؟

چرا مهم است

اگر با برنامه‌های چندنخی یا CPU-bound در پایتون کار می‌کنی، GIL می‌تونه عملکردت رو محدود کنه. باید بدونی چطور این محدودیت‌ها رو مدیریت کنی تا بهترین کارایی رو از کدت بگیری.

قبل از خواندن، این‌ها را بدان۳ مفهوم
Global Interpreter Lock (GIL)

یک mutex در پایتون که تنها به یک thread اجازه می‌دهد کنترل مفسر را در دست داشته باشد.

بیشتر درباره این مفهوم

Reference Counting

روشی برای مدیریت حافظه که تعداد ارجاعات به یک شیء را پیگیری می‌کند و زمانی که به صفر می‌رسد، حافظه را آزاد می‌کند.

بیشتر درباره این مفهوم

Race Condition

وضعیتی که در آن دو یا چند thread به طور همزمان به یک منبع مشترک دسترسی دارند و می‌توانند باعث رفتارهای غیرمنتظره شوند.

بیشتر درباره این مفهوم

قفل مفسر سراسری پایتون یا GIL یک mutex است که تنها به یک thread اجازه می‌دهد کنترل مفسر پایتون را در دست داشته باشد. این به این معنی است که در هر لحظه تنها یک thread می‌تواند در حالت اجرا باشد. تأثیر GIL برای توسعه‌دهندگانی که برنامه‌های تک‌نخی اجرا می‌کنند قابل مشاهده نیست، اما می‌تواند در کدهای چندنخی و CPU-bound به عنوان یک گلوگاه عملکردی عمل کند. از آنجا که GIL تنها به یک thread اجازه اجرا می‌دهد حتی در معماری‌های چندنخی با بیش از یک هسته CPU، GIL به عنوان یک ویژگی "بدنام" در پایتون شناخته شده است.

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

برای حل این مشکل، GIL به عنوان یک قفل واحد بر روی مفسر معرفی شد که اجرای هر بایت‌کد پایتون نیاز به گرفتن این قفل دارد. این امر از وقوع deadlock جلوگیری می‌کند و عملکرد را به طور قابل توجهی کاهش نمی‌دهد، اما به طور مؤثری هر برنامه CPU-bound پایتون را تک‌نخی می‌کند.

برای جزئیات بیشتر به مقاله اصلی مراجعه کنید: [Real Python](https://realpython.com/python-gil/).

نکته کلیدی

GIL می‌تونه در برنامه‌های چندنخی و CPU-bound پایتون به عنوان یک گلوگاه عمل کنه. باید یاد بگیری چطور این محدودیت رو مدیریت کنی تا کدت بهینه‌تر اجرا بشه.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۳)