Global Interpreter Lock (GIL, GVL) – mutex podtrzymywany przez wątek interpretera języka programowania w celu uniemożliwienia współbieżnego wykonywania kodu, nieprzystosowanego do pracy w trybie wielowątkowości. Istnieje dokładnie jedna globalna blokada interpretera dla każdego procesu interpretera.
Aplikacje napisane w językach używających GIL muszą używać osobnych procesów, aby w pełni wykorzystywać potencjał maszyn wieloprocesorowych (każdy proces dysponuje własną, niezależną blokadą).
Dobrą analogią do globalnej blokady interpretera może być spotykana w monolitycznych jądrach systemów operacyjnych globalna blokada jądra, która realizuje niemal identyczne funkcje.
Wady i zalety
Użycie GIL zmniejsza konkurencję pomiędzy wątkami tego samego procesu interpretera. Powoduje to jednak brak wyraźnego zwiększenia wydajności programu, uruchomionego na komputerze wieloprocesorowym.
Stworzenie tej blokady oraz dalszą jej obecność tłumaczyć można:
- zwiększeniem wydajności jednowątkowych programów (brak konieczności każdorazowego blokowania dla każdej struktury danych z osobna)
- łatwą integracją z bibliotekami języka C, które z reguły nie są przystosowane do pracy w trybie wielowątkowym
- prostsza implementacja odśmiecania pamięci (za pomocą zliczania referencji, które jest nieodporne na race condition)
Przykłady
Przykłady języków, w których zastosowano GIL:
Przypisy
- 1 2 3 4 Rei Odara, Jose G. Castanos, Hisanobu Tomari, Eliminating Global Interpreter Locks in Ruby through Hardware Transactional Memory [online].
- 1 2 3 Real Python, What is the Python Global Interpreter Lock (GIL)? – Real Python [online], realpython.com [dostęp 2020-01-04] (ang.).
- ↑ Nobody understands the GIL - Part 2: Implementation [online], www.jstorimer.com [dostęp 2020-01-04] [zarchiwizowane z adresu 2019-03-25].
- ↑ Multicore OCaml [online], ocamllabs.io [dostęp 2020-01-04] [zarchiwizowane z adresu 2020-01-18].