Skip to content
Surf Wiki
Save to docs
general/articles-with-example-python-programming-language-code

From Surf Wiki (app.surf) — the open knowledge base

Global interpreter lock

Mechanism that ensures threads are not executed in parallel

Global interpreter lock

Mechanism that ensures threads are not executed in parallel

Schematic representation of how threads work under GIL. Green - thread holding GIL, red - blocked threads]]

A global interpreter lock (GIL) is a mechanism used in computer-language interpreters to synchronize the execution of threads so that only one native thread (per process) can execute basic operations (such as memory allocation and reference counting) at a time. As a general rule, an interpreter that uses GIL will see only one thread to execute at a time, even if it runs on a multi-core processor, although some implementations provide for CPU intensive code to release the GIL, allowing multiple threads to use multiple cores. Some popular interpreters that have a GIL are CPython and Ruby MRI.

Technical background concepts

A global interpreter lock (GIL) is a mutual-exclusion lock held by a programming language interpreter thread to avoid sharing code that is not thread-safe with other threads. In implementations with a GIL, there is always one GIL for each interpreter process.

Applications running on implementations with a GIL can be designed to use separate processes to achieve full parallelism, as each process has its own interpreter and in turn has its own GIL. Otherwise, the GIL can be a significant barrier to parallelism.

Advantages

Reasons for employing a global interpreter lock include:

  • increased speed of single-threaded programs (no necessity to acquire or release locks on all data structures separately),
  • easy integration of C libraries that usually are not thread-safe,
  • ease of implementation (having a single GIL is much simpler to implement than a lock-free interpreter or one using fine-grained locks).

A way to get around a GIL is creating a separate interpreter per thread, which is too expensive with most languages.

Drawbacks

Use of a global interpreter lock in a language effectively limits the amount of parallelism reachable through concurrency of a single interpreter process with multiple threads. If the process is almost purely made up of interpreted code and does not make calls outside of the interpreter which block for long periods of time (allowing the GIL to be released by that thread while they process), there is likely to be very little increase in speed when running the process on a multiprocessor machine. Due to signaling with a CPU-bound thread, it can cause a significant slowdown, even on single processors. More seriously, when the single native thread calls a blocking OS process (such as disk access), the entire process is blocked, even though other application threads may be waiting.

Examples

Some language implementations that implement a global interpreter lock are CPython, the most widely-used implementation of Python,{{cite web

JVM-based equivalents of these languages (Jython and JRuby) do not use global interpreter locks. IronPython and IronRuby are implemented on top of Microsoft's Dynamic Language Runtime and also avoid using a GIL.{{cite web

An example of an interpreted language without a GIL is Tcl, which is used in the benchmarking tool HammerDB.

Example code

Example code in Python. Notice how a lock is acquired and released between each instruction call. It uses the object from the module. from threading import Lock

INSTRUCTION_TABLE = { ... }

def execute(bytecode: list) - None: """Execute bytecode.""" lock = Lock() for (opcode, args) in bytecode: lock.acquire() INSTRUCTION_TABLEopcode lock.release()

Recent Development

Free-Threaded Build (Python 3.13 and later)

In Python 3.13, an experimental "free-threaded" build of CPython was introduced as part of PEP 703 – Making the Global Interpreter Lock Optional in CPython. This build allows developers to compile Python without the Global Interpreter Lock (GIL), enabling true parallel execution of Python bytecode across multiple CPU cores. The feature is still experimental but represents a major step toward improved concurrency in future Python releases.

References

References

  1. "GlobalInterpreterLock".
  2. David Beazley. (2009-06-11). "Inside the Python GIL". Chicago Python User Group.
  3. "Python/C API Reference Manual: Thread State and the Global Interpreter Lock".
  4. (2018-11-30). "HammerDB Concepts and Architecture".
  5. "threading — Thread-based parallelism".
  6. "PEP 703 – Making the Global Interpreter Lock Optional in CPython {{!}} peps.python.org".
Info: Wikipedia Source

This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page.

Want to explore this topic further?

Ask Mako anything about Global interpreter lock — get instant answers, deeper analysis, and related topics.

Research with Mako

Free with your Surf account

Content sourced from Wikipedia, available under CC BY-SA 4.0.

This content may have been generated or modified by AI. CloudSurf Software LLC is not responsible for the accuracy, completeness, or reliability of AI-generated content. Always verify important information from primary sources.

Report