GIL(グローバルインタプリタロック)
GILグローバルインタプリタロックロックすなわち、特性はCPythonインタプリタ。その役割は、一度に一つのスレッドがPythonのバイトコードを実行することを確認することです。
それは、その存在はCPythonのメモリ管理メカニズムが原因で、Pythonの機能ではありません。一般的な言語のメモリ管理メカニズム、2があります:1つの。2.参照カウントガベージコレクションが。CPythonとは、メモリを管理するために、参照カウントに使用されています。リソース参照番号が0の場合、オブジェクトが解放されます。何GILロックが存在しない場合は、複数のスレッドの即時簡単な操作も同時にエラーになりやすいので、明らかに、変数を変更する複数のスレッドによって発生することができます。
GILは、それが遅く、実行時につながるロック?プログラムの最初のシングルスレッドの性質は効果がありません、とさえ効率を高めます。明らかにマルチスレッド化されたプログラムに影響を与えます。しかし、それはまた、マルチスレッドプログラムの種類によって異なります。
IO集約型プログラム場合は、現在のプログラムのロックがまずIO操作、ロックを解除して、ロックを取得します所有しています。スレッドは、グローバル変数PThreadState、スレッドは前回の回復後にロック状態を取得したスレッドのデータ構造を提示すると、現在のスレッドのロック状態を解除した場合。だから、GIL IO集約型のプログラムはまだ非常に友好的です。
プログラムはCPU集約型であり、他のスレッドはIO集約型のプログラムにロックを解除すると、それがアクティブとしてされません。したがって、CPythonの中のすべてに0.05秒を行っスイッチングが達成されるスレッドのロックを解除するために強制されます。
マルチプロセス:高同時実行の場合は、プロセスをスピードアップするためにあるので、あなたは別の概念を使用する必要があります。
多くのPython開発者はGILのロックを解除するために努力したいのですが、マルチスレッドの効率は低いの安全な動作を確保するためにあります。
RLOCK(再帰的ロック)
threading.RLock:同じスレッドで同じリソースに対する複数の要求をサポートするために、Pythonは「再帰的なロック」を提供します。内部RLOCKは、カウンタは、資源が獲得繰り返しすることができます取得するように回数を記録し、ロックとカウンタ変数を維持します。すべてがリリースされるまで、リソースを取得するために他のスレッドをスレッドを取得します。