Globální zámek interpretu
Globální zámek interpretu je mechanismus užívaný v interpretech programovacích jazyků k synchronizaci provádění kódu v jednotlivých vláknech tak, že v jednom okamžiku je vykonáván kód pouze v jednom vlákně.[1] Interpret, který zámek používá, umožňuje spuštění kódu z maximálně jednoho vlákna zároveň, i když běží na vícejádrovém procesoru. Mezi populární interprety využívající globální zámek interpretu patří CPython a Ruby MRI.
Výhody
Mezi důvody pro použití globálního zámku interpretu patří:
- vyšší výkon u jednovláknových programů (není nutné získávat nebo uvolňovat zámky pro všechny datové struktury samostatně)
- snadná integrace knihoven napsaných v C, které obvykle nelze ve vícevláknových programech bezpečně používat
- snadná implementace (mít globální zámek interpretu je mnohem jednodušší než implementovat bezzámkový interpret nebo interpret se specifičtějšími zámky)
Zámek je možné obejít vytvořením nového procesu interpretu pro každé nové vlákno, to je ale u většiny programovacích jazyků příliš náročné na výpočetní výkon.
Nevýhody
Globální zámek interpretu omezuje množství paralelních výpočtů, které může interpretující proces provádět, přesto, že interpretuje vícevláknový program. Pokud je takový program z většiny tvořen interpretovaným kódem a jeho vlákna nečekají na dokončení externích volání mimo interpret, ale na to, až na ně v zámku „přijde řada“, není možné jeho spuštěním na víceprocesorovém stroji dosáhnout výrazného zrychlení. Kvůli nutnosti posílat signály mezi vlákny omezovanými rychlostí procesoru může dojít k výraznému zpomalení i v případech s jedním CPU.[2]
Příklady
Mezi implementace programovacích jazyků využívající globální zámek interpretu patří CPython, nejpoužívanější implementace Pythonu, [3] [4] a Ruby MRI, referenční implementace Ruby (zde je zámek nazýván Global VM Lock).
Ekvivalenty těchto jazyků založené na JVM (Jython a JRuby) globální zámek interpretu nevyužívají. Implementace IronPython a IronRuby postavené na Dynamic Language Runtime od společnosti Microsoft také zámek nemají. [5]
Reference
V tomto článku byl použit překlad textu z článku Global Interpreter Lock na anglické Wikipedii.
- GlobalInterpreterLock [online]. [cit. 2015-11-30]. Dostupné online.
- BEAZLEY, David. Inside the Python GIL [online]. [cit. 2009-10-07]. Dostupné online.
- BEHRENS, Shannon. Concurrency and Python [online]. [cit. 2008-07-12]. Dostupné online.
- Python/C API Reference Manual: Thread State and the Global Interpreter Lock [online]. [cit. 2014-08-15]. Dostupné v archivu pořízeném dne 2008-09-14.
- IronPython at python.org [online]. [cit. 2011-04-04]. Dostupné online.