Global Interpreter Lock

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Global Interpreter Lock (ang. Globalna Blokada Interpretera) - 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 wątku 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[edytuj | edytuj kod]

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

Przykłady[edytuj | edytuj kod]

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 Global VM Lock)