Globální zámek tlumočníka

Global Interpreter Lock ( GIL ) je metoda  synchronizace vláken používaná v některých interpretovaných programovacích jazycích , jako je Python a Ruby .

Podstata konceptu

GIL je nejjednodušší způsob, jak se vyhnout konfliktům, když různá vlákna přistupují ke stejné paměti ve stejnou dobu [1] . Když to jedno vlákno chytne, GIL, fungující jako mutex , blokuje ostatní. Žádná paralelní vlákna - žádné konflikty při přístupu ke sdíleným objektům. Pořadí provádění vláken určuje interpret v závislosti na implementaci, přepínání mezi vlákny může nastat: když se aktivní vlákno pokouší provést I/O , po vyčerpání limitu provedených instrukcí nebo časovačem [2] .

Výhody a nevýhody

Hlavní nevýhodou přístupu bezpečného pro vlákna GIL je omezení paralelismu . GIL neumožňuje dosažení největší výpočetní efektivity při práci na vícejádrových a víceprocesorových systémech [3] . Také použití více vláken vyžaduje režii na jejich přepínání v důsledku sporu (vlákna se „pokoušejí“ zachytit GIL). To znamená, že vícevláknové provádění může trvat déle než sekvenční provádění stejných úloh [4] .

Důvody, proč používat GIL:

Aplikace

GIL se používá v CPythonu , nejběžnější implementaci interpretu Python [5] , a v Ruby MRI , referenční implementaci interpretu Ruby , kde se nazývá Global VM Lock .

Na internetu se nejednou objevily petice a otevřené dopisy s žádostí o odstranění GIL z Pythonu [6] . Tvůrce a „ velkorysý celoživotní diktátor “ projektu, Guido van Rossum , však uvádí, že GIL není tak špatný a bude v CPythonu, dokud někdo jiný nepředstaví implementaci Pythonu bez GIL, se kterou fungovaly jednovláknové skripty. stejně rychle [7] [8] .

Implementace interpretů JVM ( Jython , JRuby ) a .NET ( IronPython , IronRuby ) nepoužívají GIL [9] [10] .

V rámci projektu PyPy se pracuje na implementaci transakční paměti ( anglicky  Software Transactional Memory, STM ). Momentálně[ co? ] i ve vícevláknových výpočtech pracuje interpret s STM mnohonásobně pomaleji než s GIL. Ale díky JIT je PyPy-STM [11] stále rychlejší než CPython [12] .

Poznámky

  1. Stav vlákna a zámek globálního interpreta . Datum přístupu: 21. prosince 2013. Archivováno z originálu 24. prosince 2013.
  2. Antoine Pitrou. Přepracování GIL . Python Mailing Lists (25. října 2009). Získáno 21. prosince 2013. Archivováno z originálu 10. června 2011.
  3. Popis GIL . Python Wiki . Datum přístupu: 21. prosince 2013. Archivováno z originálu 24. prosince 2013.
  4. David Beazley. Uvnitř Python GIL . Chicago: Chicago Python User Group (11. června 2009). Datum přístupu: 7. října 2009. Archivováno z originálu 24. prosince 2010.
  5. Shannon-jj Behrens. Souběžnost a Python 2 . Dobb's Journal (3. února 2008). Získáno 12. července 2008. Archivováno z originálu dne 26. června 2008.
  6. Otevřený dopis Guido van Rossumovi: Pane Rossume, zbourejte ten GIL! (nedostupný odkaz) . SnapLogic (9. září 2007). Archivováno z originálu 24. prosince 2013. 
  7. Guido van Rossum . budoucnost GIL . Python Mailing Lists (8. května 2007). Získáno 21. prosince 2013. Archivováno z originálu dne 9. listopadu 2020.
  8. Guido van Rossum. Není snadné odstranit GIL . artima.com (10. září 2007). Získáno 21. prosince 2013. Archivováno z originálu 6. června 2019.
  9. WhyJython . Python Wiki. Datum přístupu: 21. prosince 2013. Archivováno z originálu 22. prosince 2013.
  10. IronPython . Python Wiki. Získáno 4. dubna 2011. Archivováno z originálu 12. června 2011.
  11. [https://web.archive.org/web/20131224175835/http://bitbucket.org/pypy/pypy/raw/stm-thread/pypy/doc/stm.rst Archivováno 24. prosince 2013 na Wayback Machine PyPy-STM na Bitbucket ]
  12. Aktualizace STM . Python Wiki (16. října 2013). Datum přístupu: 21. prosince 2013. Archivováno z originálu 24. prosince 2013.