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

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

CPythonのはGILがミューテックス自体で、GILのグローバルインタープリタが付属しています

キー:因为有了GIL全局解释器锁,导致了在同一进程的同一时刻只有一个线程在执行,无法利用多核优势

問題は、実際にGILのガベージコレクション機構、オペレーティングシステムのスケジューリング問題になるので、我々は、プログラム内のスレッドの並列動作を記述していても実際には、並列スレッドがまだシリアルなり、これはGILのグローバルインタープリタです同じプロセスで同じ時間につながっロック、唯一のスレッドが実行されています、

仮想マシンで実行されるPythonのPythonコードは、制御された(また、インタプリタメインループと呼ばれます)。初期の設計でPythonは唯一つのスレッドの実行ながら、考慮にメインループを取る必要があります。Pythonインタプリタは、複数のスレッドを「実行」することができますが、唯一つのスレッドは、いつでもインタプリタで実行している間。

Pythonの仮想マシンへのアクセスは、グローバルインタープリタロック(GIL)によって制御され、それがこのロックが一つだけのスレッドが実行されていることを保証しています。

マルチスレッド環境では、Pythonの仮想マシンは、次の方法を実行します。

  1. GILを設定します。
  2. 実行するためのスレッドに切り替えます。
  3. 制御へのバイトコード命令またはスレッドイニシアチブの指定された数(time.sleep(0)と呼ぶことができます)。
  4. スレッドがスリープ状態に。
  5. GILのロックを解除。
  6. 再度、上記のすべての手順を繰り返します。

(たとえば、C / C ++拡張機能など)外部コードのを呼び出すとき、GILは、関数の最後までロックされます(何のPythonバイトコードが存在しないため、この期間中に実行されるため、スレッド切り替えをしていない)の拡張機能を書き込みますプログラマはGILのロックを解除するためのイニシアチブを取ることができます。

第二に、なぜGILグローバルインタープリタロックを持っています

CPythonの自身のガベージコレクションがスレッドセーフではないので、そのGILロックすること。

同じプロセスの下で導かれ、一つだけのスレッドを実行することができ、同時に、あなたはマルチコアの優位性を活用することはできません。

おすすめ

転載: www.cnblogs.com/xichenHome/p/11569073.html