グローバルインタプリタロック

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

グローバルインタプリタロック: Global Interpreter Lock, GIL)とは、プログラミング言語インタプリタスレッドによって保持されるスレッドセーフでないコードを、他のスレッドと共有してしまうことを防ぐための排他 ロックである。インタプリタのひとつのプロセスごとに必ずひとつの GIL が存在する。

プログラミング言語においてグローバルインタプリタロックを採用した場合、複数のスレッドを持つインタプリタプロセスの並行性を制限してしまう。プロセスをマルチプロセッサのマシンで実行させた場合、ほとんどあるいはまったく速度の向上が見られない。

こうしたロックを採用する理由として、下記のものがある。

  • シングルスレッドのプログラムの速度向上(すべてのデータ構造に対して別々にロックを獲得・開放する必要がなくなる)
  • 通例スレッドセーフではないC言語のライブラリとの結合が容易である。

インタプリタがひとつずつ GIL を持つため、GIL を持つ言語で書かれたアプリケーションは、完全な並列性を得るため別々のプロセス(すなわちインタプリタ)を持つ必要がある。

グローバルインタプリタロックを実装した言語には、下記のものがある:

参考文献[編集]

  1. ^ 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.
  2. ^ Python/C API Reference Manual: Thread State and the Global Interpreter Lock

関連項目[編集]