Global Interpreter Lock ( GIL ) er en trådsynkroniseringsmetode, der bruges i nogle fortolkede programmeringssprog , såsom Python og Ruby .
GIL er den nemmeste måde at undgå konflikter på, når forskellige tråde får adgang til den samme hukommelse på samme tid [1] . Når en tråd griber den , blokerer GIL, der fungerer som en mutex , de andre. Ingen parallelle tråde - ingen konflikter ved adgang til delte objekter. Rækkefølgen for udførelse af tråde bestemmes af fortolkeren afhængigt af implementeringen, skift mellem tråde kan forekomme: når en aktiv tråd forsøger at udføre I/O , efter at grænsen for udførte instruktioner er opbrugt , eller af en timer [2] .
Den største ulempe ved den GIL -trådssikre tilgang er begrænsningen af parallelisme . GIL tillader ikke at opnå den største beregningseffektivitet, når man arbejder på multi-core og multi -processor systemer [3] . Brugen af flere tråde pålægger også overhead på deres skift på grund af effekten af strid (tråde "prøver" at opsnappe GIL). Det vil sige, at multi-threaded udførelse kan tage længere tid end sekventiel udførelse af de samme opgaver [4] .
Grunde til at bruge GIL:
GIL bruges i CPython , den mest almindelige implementering af Python -fortolkeren [5] , og i Ruby MRI , referenceimplementeringen af Ruby- fortolkeren , hvor den kaldes Global VM Lock .
Andragender og åbne breve er dukket op på nettet mere end én gang , hvor de blev bedt om at fjerne GIL fra Python [6] . Skaberen og den " generøse livslange diktator " af projektet, Guido van Rossum , udtaler imidlertid, at GIL ikke er så slemt og vil være i CPython, indtil en anden introducerer en Python-implementering uden GIL, som enkelttrådede scripts fungerede med bare lige så hurtigt [7] [8] .
JVM ( Jython , JRuby ) og .NET ( IronPython , IronRuby ) tolkeimplementeringerne bruger ikke GIL [9] [10] .
Som en del af PyPy- projektet arbejdes der på at implementere transaktionshukommelse ( engelsk Software Transactional Memory, STM ). I øjeblikket[ hvad? ] selv i flertrådede beregninger arbejder tolken med STM mange gange langsommere end med GIL. Men på grund af JIT er PyPy-STM [11] stadig hurtigere end CPython [12] .