Globaali tulkin lukko

Global Interpreter Lock ( GIL ) on  säietynkronointimenetelmä, jota käytetään joissakin tulkitetuissa ohjelmointikielissä , kuten Pythonissa ja Rubyssa .

Käsitteen olemus

GIL on helpoin tapa välttää konflikteja, kun eri säikeet käyttävät samaa muistia samanaikaisesti [1] . Kun yksi lanka tarttuu siihen, GIL, joka toimii kuin mutex , estää muut. Ei rinnakkaisia ​​säikeitä – ei ristiriitoja jaettujen objektien käytössä. Säikeiden suoritusjärjestyksen määrää tulkki toteutuksesta riippuen, vaihtoa säikeiden välillä voi tapahtua: kun aktiivinen säie yrittää suorittaa I/O :n, suoritettujen käskyjen rajan täyttymisen jälkeen tai ajastimella [2] .

Edut ja haitat

GIL- säieturvallisen lähestymistavan suurin haittapuoli on rinnakkaisuuden rajoitus . GIL ei salli suurinta laskentatehokkuutta työskennellessäsi moniytimisissä ja moniprosessorijärjestelmissä [ 3] . Lisäksi useiden säikeiden käyttö lisää niiden vaihtamista kiistan vaikutuksesta (säikeet "yrittävät" siepata GIL:n). Toisin sanoen monisäikeinen suoritus voi kestää kauemmin kuin samojen tehtävien peräkkäinen suorittaminen [4] .

Syitä GIL:n käyttöön:

Sovellus

GIL:ää käytetään CPythonissa , joka on Python -tulkin yleisin toteutus [5] , ja Ruby MRI :ssä, Ruby -tulkin referenssitoteutus , jossa sitä kutsutaan nimellä Global VM Lock .

Verkossa on ilmestynyt vetoomuksia ja avoimia kirjeitä useammin kuin kerran , joissa niitä on pyydetty poistamaan GIL Pythonista [6] . Projektin luoja ja " antelias elinikäinen diktaattori " Guido van Rossum kuitenkin toteaa, että GIL ei ole niin huono ja tulee olemaan CPythonissa, kunnes joku muu esittelee Python-toteutuksen ilman GIL:ää, jonka kanssa yksisäikeiset skriptit toimivat vain. yhtä nopeasti [7] [8] .

JVM ( Jython , JRuby ) ja .NET ( IronPython , IronRuby ) tulkkien toteutukset eivät käytä GIL: ää [9] [10] .

Osana PyPy -projektia työstetään transaktiomuistin ( englanniksi  Software Transactional Memory, STM ) käyttöönottoa. Tällä hetkellä[ mitä? ] jopa monisäikeisissä laskelmissa STM-tulkki toimii monta kertaa hitaammin kuin GIL:llä. Mutta JIT :n ansiosta PyPy-STM [11] on silti nopeampi kuin CPython [12] .

Muistiinpanot

  1. Säikeen tila ja Global Interpreter Lock . Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 24. joulukuuta 2013.
  2. Antoine Pitrou. GIL:n uusiminen . Python-postituslistat (25. lokakuuta 2009). Haettu 21. joulukuuta 2013. Arkistoitu alkuperäisestä 10. kesäkuuta 2011.
  3. GIL-kuvaus . Python Wiki . Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 24. joulukuuta 2013.
  4. David Beazley. Python GIL:n sisällä . Chicago: Chicago Python User Group (11. kesäkuuta 2009). Käyttöpäivä: 7. lokakuuta 2009. Arkistoitu alkuperäisestä 24. joulukuuta 2010.
  5. Shannon-jj Behrens. Samanaikaisuus ja Python 2 . Dobb's Journal (3. helmikuuta 2008). Haettu 12. heinäkuuta 2008. Arkistoitu alkuperäisestä 26. kesäkuuta 2008.
  6. Avoin kirje Guido van Rossumille: Herra Rossum, purkaa tuo GIL! (linkki ei saatavilla) . SnapLogic (9. syyskuuta 2007). Arkistoitu alkuperäisestä 24. joulukuuta 2013. 
  7. Guido van Rossum . GIL:n tulevaisuus . Python-postituslistat (8. toukokuuta 2007). Haettu 21. joulukuuta 2013. Arkistoitu alkuperäisestä 9. marraskuuta 2020.
  8. Guido van Rossum. GIL:n poistaminen ei ole helppoa . artima.com (10. syyskuuta 2007). Haettu 21. joulukuuta 2013. Arkistoitu alkuperäisestä 6. kesäkuuta 2019.
  9. WhyJython . Python Wiki. Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 22. joulukuuta 2013.
  10. IronPython . Python Wiki. Haettu 4. huhtikuuta 2011. Arkistoitu alkuperäisestä 12. kesäkuuta 2011.
  11. [https://web.archive.org/web/20131224175835/http://bitbucket.org/pypy/pypy/raw/stm-thread/pypy/doc/stm.rst Arkistoitu 24. joulukuuta 2013 Wayback Machinessa PyPy-STM Bitbucketissa ]
  12. STM-päivitys . Python Wiki (16. lokakuuta 2013). Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 24. joulukuuta 2013.