A глобальная блокировка интерпретатора (GIL ) - это механизм, используемый в интерпретаторах компьютерного языка для синхронизации выполнения потоков, чтобы только один собственный поток мог выполнять за один раз. Интерпретатор, использующий GIL, всегда позволяет выполнять только один поток за раз, даже если он выполняется на многоядерном процессоре. Некоторые популярные интерпретаторы с GIL: CPython и Ruby MRI.
Глобальная блокировка интерпретатора (GIL) - это взаимное исключение блокировка, удерживаемая язык программирования интерпретатор thread, чтобы избежать совместного использования кода, не потокобезопасного с другими потоками. В реализациях с GIL всегда есть один GIL для каждого интерпретатора процесс.
Приложения, работающие в реализациях с GIL, могут быть разработаны для использования отдельных процессов для достижения полного параллелизма, поскольку каждый процесс имеет свой собственный интерпретатор и, в свою очередь, есть собственный GIL. В противном случае GIL может стать серьезным препятствием для параллелизма.
Использование глобальной блокировки интерпретатора в языке эффективно ограничивает степень параллелизма, достижимую через параллелизм одного процесса интерпретатора с несколькими потоки. Если процесс почти полностью состоит из интерпретируемого кода и не выполняет вызовов вне интерпретатора, которые блокируются на длительные периоды времени (позволяя GIL освобождаться этим потоком во время обработки), вероятно, будет очень небольшое увеличение по скорости при запуске процесса на многопроцессорной машине. Из-за передачи сигналов с потоком, привязанным к процессору, это может вызвать значительное замедление даже на отдельных процессорах.
Причины использования глобальной блокировки интерпретатора включают:
Способ обойти GIL - создать отдельный интерпретатор для каждого потока, что слишком дорого с большинством языков.
Некоторые языковые реализации, реализующие глобальную блокировку интерпретатора: CPython, наиболее широко используемая реализация Python и Ruby MRI, эталонная реализация из Ruby (где она называется Global VM Lock). Эквиваленты этих языков на основе
JVM (Jython и JRuby ) не используют глобальные блокировки интерпретатора. IronPython и IronRuby реализованы на основе Microsoft Dynamic Language Runtime и также избегают использования GIL.
Примером интерпретируемого языка, не страдающего от GIL, является Tcl, который используется в инструменте тестирования производительности HammerDB.