再帰的なロックとデッドロック
ロッキング関数は連続関数を含むことに根ざし現象、及びそれぞれのロックをデッドロックし、一定のタイムラグがあるロックを解錠。矛盾は、これらの機能の多くを注文すると、スタイルの異なるプロセス/スレッドはおそらく異なる順序/スレッドのため、これらの関数を呼び出す際にロックされ、プロセスでロックつかむもつかむ他のプロセス/スレッドロックにつながる最初のロックを解除するように見えます一貫性のないパフォーマンスと機能、デッドロックに連続して使用することはできません。
利点:ロックを標的、各ロック所与異なるパーミッションは、プロセス制御機能を容易にします。
短所:機能ロジックは点に、より多くの注意を必要と異なるロック順序が、複数の関数を呼び出すとき、スレッドは、デッドロックが発生するため、パフォーマンス関数は、対応するロックアンロックを完了できない、異なっていてもよく、効率の低下そして、精度。
再帰的ロック:
デッドロック、再帰的ロックの導入を解決するために。
再帰的ロック記号:スレッドインポートRLOCKから
lock_A = lock_B = RLOCK()
一般的な原理は、初期化時に、ロックのすべてが平等に扱わということです。唯一の回数をカウントロックを解除するロックのタイプを除きます。初期化時に、デフォルトの番号は0ロック、カウントが1でロックソリューションは、1技術を差し引かれるたびにインクリメントされた後たびにロック機能です。ロック時間は機能が複数のプロセスであることができることを示し、ゼロに戻りとき/スレッドがコールステージをスクランブル。
利点:平等のすべてのロックは、必ずしもちょうどロックの数を考慮して、ロック・デ・プラスのタイプに対応していません。プロセス/スレッドにしたときに関数を呼び出し、検出し、使いやすいです。
短所:貧しいが、目標とロックします。ロックは対象とすることはできません。
二、GILグローバルロック
合計データは同じスレッドで共有されているため、セキュリティと安定性のデータを確保するために、pythonの際に初期の開発、それは1つのCPUコアのみであったため、スレッドが全体のためにロックされ、このロックはGILグローバルロックになっている。付フォローアップの技術開発、マルチコアプロセッサの登場が、保存のpythonグローバルロックを(あまりを消費する言語を変更することにより)、の違いにつながったが、次のプロセスデータに影響を与えます。CPythonの(解釈言語、形成識別バイトコードに基づいてC言語インタプリタとしてPython)より明白と影響されないような他のJPythonのpypyため、この違い。
パスを説明しCPythonの:
実質的にパス:ファイル - コンパイラ(Cバイトコード言語認識) - 仮想マシン(バイトコードをマシンコードに変換される) - CPU。
このように限られたCPythonの、一回のみの単一コアスレッド/プロセスインタプリタを可能にします。
グローバルロックのプラスの利点:リソースのCPythonのインタプリタのセキュリティを確保します。
短所:単一プロセス、マルチスレッド、マルチコアリソースは、理論的には、CPUの利用効率を低下させる、使用することができません。
CPythonのは、独自の特性の出現を阻止するの種類を実行します。
1、I / O閉塞
同時に単一のプロセス走行速度の複数のスレッドによる同時マルチプロセスよりも遅くありません。
IOをブロックとの出会いを実行するマルチスレッドプロセスにおける理由のシングルコアCPUは、複数のスレッド間で切り替えます。各プロセスの複数のプロセスと複数の(同時)を実行するCPUは、IOが待ち状態でブロックされて発生した、同じことがお互いに切り替わります、想像したときにブロックされた状態にあるすべてのプロセス、同じCPUのすべての意志停止時。また、開速度より速い処理スレッド、スレッドオープンリソース集約的なプロセスよりも低くより。上記二つの点、シングルスレッド(シングルコア)、及び利点のビットに比べ並列(マルチコア)に、より複雑なプロセスの決定プロセスから。これは単に、外部からのブロッキング、あなたが外部処理を待機しなければならないとしても最高のコンピュータとして理解することができます。
マルチプロセスよりも高速に実行するために複数のスレッドを開きます。
図2に示すように、計算集約遮断します
その理由は、閉塞計算集約CPU動作のみ、それは計算複数の長期間CPUが切り替わり、端にソースコードを表示されないことです。
このプロセスでは、単一のマルチスレッドの並列処理は、差がシングルコアCPUのためのより複雑な処理動作は、CPUが同時に複数のスレッド間でリソースを複数のコンピューティングを処理して、異なるスレッド間で切り替えられることです割り当て。マルチコアCPUのために、単一の操作を処理するために、各CPUは、無相互ハンドオーバと、単一のCPUのために、割り当てられたコンピュータの場合、合理的なCPUリソースが動作を中心に説明します。短い時間。
3、違いGILグローバルロックロックロック付き
同じポイント:ロックの同じ種類あり、ミューテックス
違い:
内部リソースデータの安全な通訳を保護するために、1)GILグローバルロック。
2)GILロックおよびマニュアルなしでアンロック。
3)
第三に、情報量
複数のスレッドを可能にする情報の量は、/プロセスがCPUリソースを奪われました。
そして、シンボルの使用:輸入セマフォ、使用量と同様のロックをスレッドから。
最初の初期化、所定の単一の最大スループットSEM =セマフォ(5)。
第二に、関数がロック文の内部で実行され、sem.acquire()
文が実行された後、最後に、ロック解除はsem.release()。
約役割は、より多数のスレッドが対処する必要がある場合は、同時に実行できるスレッドの最大数は、埋めるために空席を達成するために、銀行窓のようになりますことを提供することを目的とします。
マルチスレッドに基づいて、4つ、ソケット通信
ソケットとの類似点と相違点に基づいて、マルチスレッドソケット通信の前にマルチリンク(デュアルサーバーwhileループ)に基づいて:
前者は同じ終わりにマルチスレッド・サーバーを開く方法の問題点を解決するために主にあります。