Python GIL(Global Interpret Lock)ロック

936 ワード

pythonに詳しい人は、C言語で書かれたpython解釈器にグローバル解釈器ロックが存在することを知っています.グローバル解釈器ロックの存在により、同じ時間にpython解釈器は1つのスレッドのコードしか実行できません.これはpythonマルチスレッドの性能に大きく影響します.
python GILがマルチスレッドなどの性能に影響を与えるのは、マルチスレッドの場合、 , , , python , であるため、マルチコアの場合でもシングルコアの性能しか発揮できないからである.
pythonが同じ時刻に1つのスレッドのコードしか実行できない以上、スレッド間はどのようにスケジューリングされていますか?io操作のあるスレッドの場合、1つのスレッドがio操作をしている場合、io操作にはcpuが必要ないため、pythonはpythonグローバルロックを解放し、他の実行が必要なスレッドがこのロックを使用します.cpu密集型のスレッドの場合、たとえばスレッドがcpuを使用して計算する必要がある場合、pythonには実行命令のカウンタがあり、1つのスレッドが一定数の命令を実行すると、スレッドは実行を停止し、現在のロックを譲り、他のスレッドがコードを実行できるようになります.
以上から、pythonがスレッド切り替えを行う場合は少なくとも2つあります.
  • 一が一であるがIO がある場合、スレッド切替
  • がある.
  • は、1つのスレッドが 連続して実行されると、スレッド切替が発生する.もちろん、ここでのスレッド切替は必ずしも他のスレッドに切り替えるとは限らない.現在のスレッドの優先度が高い場合、ロックを譲渡した後もロックを取得し、優先的に実行する可能性があるからだ.

  • 科学的な計算には単一スレッドが用いられるが,この計算にはCPUが常に計算を行う必要があるため,マルチスレッドを用いるとかえって計算速度が低下する.