1.グローバルインタープリタロック:一つだけのスレッドがリソースを時間の操作権限を合意したことを確実にします
役割:プロセスにおいて、GILロックすることにより、一度に一つだけスレッドが、CPUと呼ばれる状態を切り換える:I / O動作、固定時間が* *(システムによって決定される)**。
説明:マルチスレッドでPythonのGILロックは運転中のみCPUのシリアルで、他の人は、そんなに速くシリアルよりも平行です。
異なるスレッドに対処するために1は、同時にGILから生じるデータ保護の問題を同じリソースにアクセスします。
通訳のレベルの2.GILプログラムはあなたのプログラムに関係なく、一つのスレッドだけが実際に同時にCPUによって実行されるオープンスレッドの実際の数を持っている制限します
一つのスレッドだけがこのデータを取得することができ、同時に、グローバルインタプリタロックのCPthon独自の定義をこの問題を解決するために3。
悪い状況がPythonのスレッドを有効にすることですのオペレーティングシステムにネイティブスレッドを呼び出すことですので、これが起こる4.python、Cインタフェースです。
欠陥のないようなものが存在しないという点で、5しかし、これは、PyPyで、唯一の問題は、このバージョンCPythonのです。
ユーザロック:ロックねじ:
現在のスレッドは、他の操作は、その操作のスレッドを超えることはできません前に完了していない、とGILロックをリリースしました
私は、ユーザーのロックを必要としないのはなぜGILがロック1. ?
GILロックは、各リソース操作のために一つだけのスレッドに同じ時間を保証することができますが、現在のスレッド・コンピューティング・イニシアチブの完了は、その操作にロック、他のスレッドを解放します。
2.ロック原則スレッド
リソースプラスねじロックのCPU計算のスレッド操作は、その操作にロック、他のスレッドを解放するだけで、現在のスレッド・コンピューティング・イニシアチブを完了したとき。
このリソース運用上の他のスレッドGILロックの解除は、混乱を招くの後にこれは、計算が完了していない防ぐことができます。
3.スレッドロック原理は、上記の問題を解決するには?
GILにスレッドロックねじロックと一緒にロックは、ユーザレベルロックです。
スレッドは、操作前のデータのスレッドロックに加えて、他のスレッドの法律またはこのデータを防ぐロックであり、
唯一のスレッドの動作が完了した後のデータは、他のスレッドがデータを操作するために、ロックを解除します。
デッドロック
デッドロックの1.定義
待っている別の現象と1.リソースの競合に起因します。
2.デッドロックの例
ロックスレッド1錠ケーススレッド1最初のグラブが解放されていない場合1. 5スレッドは、実行方法は、コードmutexB.acquire()、Bグラブロックを実行することによって、続いたときにロックグラブB、なし競争をスレッド1スレッド、ロックが解除されていないので、他のスレッドのみを待つことができます。
3.デッドロックを解決するために、再帰的ロックを使用しました
1.再帰的ロックの役割は、同じスレッド複数の同じリソースに対する要求はなく、パラメータのデッドロックです。
2.内部RLOCKはロックとカウンタ変数を維持します。カウンタは、リソースは、多くの時間が必要になることができるように回数は、取得し記録します。
すべてのスレッドがリリースを取得している3までは、他のスレッドがリソースを取得します。