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:

  • Python (dokładniej jego implementacja w C)
  • Ruby (dotyczy klasycznych implementacji MRI i YARV; JRuby i Rubinius nie mają GIL; używa się także nazwy Giant VM Lock)
  • OCaml

Przypisy

  1. 1 2 3 4 Rei Odara, Jose G. Castanos, Hisanobu Tomari, Eliminating Global Interpreter Locks in Ruby through Hardware Transactional Memory [online].
  2. 1 2 3 Real Python, What is the Python Global Interpreter Lock (GIL)? – Real Python [online], realpython.com [dostęp 2020-01-04] (ang.).
  3. Nobody understands the GIL - Part 2: Implementation [online], www.jstorimer.com [dostęp 2020-01-04] [zarchiwizowane z adresu 2019-03-25].
  4. Multicore OCaml [online], ocamllabs.io [dostęp 2020-01-04] [zarchiwizowane z adresu 2020-01-18].
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.