Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Глобальная блокировка интерпретатора ( GIL ) представляет собой механизм , используемый в компьютерных языковых переводчиков , чтобы синхронизировать выполнение потоков , так что только один родной поток может выполнять одновременно. [1] Интерпретатор, использующий GIL, всегда позволяет выполнять только один поток за раз, даже если он выполняется на многоядерном процессоре . Некоторые популярные интерпретаторы с GIL - это CPython и Ruby MRI .

Технические основы концепции [ править ]

Глобальная блокировка интерпретатора (GIL) - это блокировка взаимного исключения, удерживаемая потоком интерпретатора языка программирования, чтобы избежать совместного использования кода, который не является потокобезопасным, с другими потоками. В реализациях с GIL всегда есть один GIL для каждого процесса интерпретатора .

Приложения, работающие на реализациях с GIL, могут быть спроектированы так, чтобы использовать отдельные процессы для достижения полного параллелизма, поскольку каждый процесс имеет свой собственный интерпретатор и, в свою очередь, свой собственный GIL. В противном случае GIL может стать серьезным препятствием для параллелизма.

Недостатки [ править ]

Использование глобальной блокировки интерпретатора в языке эффективно ограничивает степень параллелизма, достижимую за счет параллелизма одного процесса интерпретатора с несколькими потоками. Если процесс почти полностью состоит из интерпретируемого кода и не выполняет вызовов вне интерпретатора, которые блокируются в течение длительных периодов времени (позволяя GIL освобождаться этим потоком во время обработки), вероятно, будет очень небольшое увеличение по скорости при запуске процесса на многопроцессорной машине. Из-за сигнализации с потоком, привязанным к ЦП, это может вызвать значительное замедление даже на отдельных процессорах. [2]

Преимущества [ править ]

Причины использования глобальной блокировки интерпретатора включают:

  • повышенная скорость работы однопоточных программ (нет необходимости устанавливать или снимать блокировки для всех структур данных по отдельности),
  • простая интеграция библиотек C, которые обычно не являются потокобезопасными,
  • простота реализации (один GIL реализовать гораздо проще, чем интерпретатор без блокировок или интерпретатор с мелкозернистыми блокировками).

Способ обойти GIL - создать отдельный интерпретатор для каждого потока, что слишком дорого для большинства языков.

Примеры [ править ]

Некоторые реализации языка , которые реализуют глобальную блокировку интерпретатора CPython , наиболее широко используемый реализация Python , [3] [4] и Руби МРТ , то эталонная реализация на Ruby , (где он называется Global VM Lock).

Эквиваленты этих языков на основе JVM ( Jython и JRuby ) не используют глобальные блокировки интерпретатора. IronPython и IronRuby реализуются на вершине Microsoft «s Dynamic Language Runtime , а также избегать использования GIL. [5]

Примером интерпретируемого языка без GIL является Tcl , который используется в инструменте тестирования производительности HammerDB. [6]

См. Также [ править ]

  • Зеленые нити
  • Гигантский замок

Ссылки [ править ]

  1. ^ "GlobalInterpreterLock" . Проверено 30 ноября 2015 года .
  2. ^ Дэвид Бизли (2009-06-11). «Внутри Python GIL» (PDF) . Чикаго: Чикагская группа пользователей Python . Проверено 7 октября 2009 .
  3. ^ Шеннон -jj Беренс (2008-02-03). «Параллелизм и Python» . Журнал доктора Добба . п. 2 . Проверено 12 июля 2008 . GIL - это блокировка, которая используется для защиты всех критических разделов в Python. Следовательно, даже если у вас несколько процессоров, только один поток может выполнять «питонические» вещи одновременно.
  4. ^ «Справочное руководство по API Python / C: состояние потока и глобальная блокировка интерпретатора» . Архивировано из оригинала на 2008-09-14 . Проверено 15 августа 2014 .
  5. ^ «IronPython на python.org» . python.org . Проверено 4 апреля 2011 . IronPython не имеет GIL, а многопоточный код может использовать многоядерные процессоры.
  6. ^ «Концепции и архитектура HammerDB» . HammerDB. 2018-11-30 . Проверено 10 мая 2020 . С самого начала важно понимать, что HammerDB написан на TCL из-за уникальных возможностей многопоточности, которые предоставляет TCL.