グローバルインタプリタロック
グローバルインタプリタロック(英: Global Interpreter Lock, GIL)とは、プログラミング言語のインタプリタのスレッドによって保持されるスレッドセーフでないコードを、他のスレッドと共有してしまうことを防ぐための排他 ロックである。インタプリタのひとつのプロセスごとに必ずひとつの GIL が存在する。
プログラミング言語においてグローバルインタプリタロックを採用した場合、複数のスレッドを持つインタプリタプロセスの並行性を制限してしまう。プロセスをマルチプロセッサのマシンで実行させた場合、ほとんどあるいはまったく速度の向上が見られない。
こうしたロックを採用する理由として、下記のものがある。
シングルスレッドのプログラムの速度向上(すべてのデータ構造に対して別々にロックを獲得・解放する必要がなくなる)
通例スレッドセーフではないC言語のライブラリとの結合が容易である。
インタプリタがひとつずつ GIL を持つため、GIL を持つ言語で書かれたアプリケーションは、完全な並列性を得るため別々のプロセス(すなわちインタプリタ)を持つ必要がある。
グローバルインタプリタロックを実装した言語には、下記のものがある:
Python(正確には C言語による実装であるCPython)
Ruby(グローバルVMロックと呼ばれている)