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:
- Yksisäikeiset komentosarjat toimivat paljon nopeammin kuin muut säikeen turvalliset lähestymistavat;
- Helppo integroida C - kirjastoja , jotka eivät useinkaan ole säikeen turvallisia;
- Käyttöönoton helppous.
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
- ↑ Säikeen tila ja Global Interpreter Lock . Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 24. joulukuuta 2013. (määrätön)
- ↑ Antoine Pitrou. GIL:n uusiminen . Python-postituslistat (25. lokakuuta 2009). Haettu 21. joulukuuta 2013. Arkistoitu alkuperäisestä 10. kesäkuuta 2011. (määrätön)
- ↑ GIL-kuvaus . Python Wiki . Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 24. joulukuuta 2013. (määrätön)
- ↑ 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. (määrätön)
- ↑ 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. (määrätön)
- ↑ Avoin kirje Guido van Rossumille: Herra Rossum, purkaa tuo GIL! (linkki ei saatavilla) . SnapLogic (9. syyskuuta 2007). Arkistoitu alkuperäisestä 24. joulukuuta 2013. (määrätön)
- ↑ Guido van Rossum . GIL:n tulevaisuus . Python-postituslistat (8. toukokuuta 2007). Haettu 21. joulukuuta 2013. Arkistoitu alkuperäisestä 9. marraskuuta 2020. (määrätön)
- ↑ 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. (määrätön)
- ↑ WhyJython . Python Wiki. Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 22. joulukuuta 2013. (määrätön)
- ↑ IronPython . Python Wiki. Haettu 4. huhtikuuta 2011. Arkistoitu alkuperäisestä 12. kesäkuuta 2011. (määrätön)
- ↑ [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 ]
- ↑ STM-päivitys . Python Wiki (16. lokakuuta 2013). Käyttöpäivä: 21. joulukuuta 2013. Arkistoitu alkuperäisestä 24. joulukuuta 2013. (määrätön)