グローバルインタプリタロック
グローバルインタプリタロック(英: Global Interpreter Lock, GIL)とは、プログラミング言語のインタプリタのスレッドによって保持されるスレッドセーフでないコードを、他のスレッドと共有してしまうことを防ぐための排他 ロックである。インタプリタのひとつのプロセスごとに必ずひとつの GIL が存在する。
プログラミング言語においてグローバルインタプリタロックを採用した場合、複数のスレッドを持つインタプリタプロセスの並行性を制限してしまう。プロセスをマルチプロセッサのマシンで実行させた場合、ほとんどあるいはまったく速度の向上が見られない。
こうしたロックを採用する理由として、下記のものがある。
- シングルスレッドのプログラムの速度向上(すべてのデータ構造に対して別々にロックを獲得・解放する必要がなくなる)
- 通例スレッドセーフではないC言語のライブラリとの結合が容易である。
インタプリタがひとつずつ GIL を持つため、GIL を持つ言語で書かれたアプリケーションは、完全な並列性を得るため別々のプロセス(すなわちインタプリタ)を持つ必要がある。
グローバルインタプリタロックを実装した言語には、下記のものがある:
脚注
編集- ^ “Concurrency and Python”. Dr. Dobb's Journal (2008年2月3日). 2008年7月12日閲覧。 “The GIL is a lock that is used to protect all the critical sections in Python. Hence, even if you have multiple CPUs, only one thread may be doing "pythony" things at a time.”
- ^ “Python/C API Reference Manual: Thread State and the Global Interpreter Lock”. 2007年9月3日18:04:40時点のオリジナルよりアーカイブ。19 September 2007閲覧。
- ^ “Rubyの(グローバル)VMロックをトレースする(翻訳)”. TechRacho. BPS株式会社 (2022年9月2日). 2023年5月23日閲覧。 “実はもうGVLという呼び方はなくなりました”
- ^ バージョン3.0より前[3]