قفل مفسر سراسری

قفل مفسر سراسری (به انگلیسی: Global Interpreter Lock (GIL)) مکانیزمی است که برای همگام سازی اجرای ریسه‌ها در مفسر زبان‌های برنامه‌نویسی مورد استفاده قرار می‌گیرد به طوری که تنها یک ریسه می‌تواند در یک زمان اجرا شود.[۱] مفسری که همیشه از GIL استفاده می‌کند فقط قادر به یک اجرای یک ریسه در یک زمان است حتی اگر اجرا بر روی یک پردازنده چند هسته ای انجام شود.

مفاهیم فنی

در یک زبان برنامه نویسی قفل مفسر سراسری یک قفل انحصار متقابل در نظر گرفته می‌شود که باعث جلوگیری از اشتراک گذاشتن کد ما بین دیگر ریسه‌ها و یک ریسه ناامن است. در پیاده‌سازی با این قفل، همیشه برای یک ریسه یک قفل در نظر گرفته می‌شود.[۲]

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

اشکالات

استفاده از این قفل در یک زبان به‌طور مؤثر میزان راینش موازی را از طریق هم‌روندی یک پردازنده با چندین ریسه محدود می‌کند.

دلایل به کارگیری یک قفل عبارتند از:

  • افزایش سرعت برنامه‌های تک‌روندی (بدون ضرورت به دست آوردن و یا آزادسازی قفل در تمام ساختارهای داده ای جداگانه)
  • ادغام سازی آسانِ کتابخانه‌های C که معمولاً روندهای ناامن دارند
  • سهولت پیاده‌سازی

مثال

در زبان‌های زیر به صورت گسترده از این قفل استفاده شده است:[۳][۴]

زبان‌های استفاده کننده از GIL
زبان مفسر
پایتون سی‌پایتون
روبی Ruby MRI

جستارهای وابسته

منابع

  1. "GlobalInterpreterLock". Retrieved 30 November 2015.
  2. David Beazley (۲۰۰۹-۰۶-۱۱). «Inside the Python GIL» (PDF).
  3. «Concurrency and Python». Dr. Dobb's. دریافت‌شده در ۲۰۲۵-۰۱-۱۸.
  4. "threading — Thread-based parallelism". Python documentation (به انگلیسی). Retrieved 2025-01-18.