2016-08-26 2 views
0

私はPythonのグローバルインタープリタロックでパフォーマンスに問題はありませんでした。一般的なアドバイスにもかかわらず、GILは自動的にスレッドの安全性を保証するわけではありませんが、一般に10スレッド以上のプログラムがあります。一緒に、一緒に、時間。それはやや複雑な非同期メッセージングシステムです。スレッドとPythonのグローバルインタープリタロックでパフォーマンスに問題がありません。スケーラビリティ?

私はこのプログラムでCeleryを使用していてもマルチプロセッシングを理解していますが、この問題セットのマルチプロセッシングを実行するには、ソリューションが非常に複雑でなければなりません。

私は2.7を実行しており、パフォーマンスの低下にもかかわらず再帰的なロックを使用しています。

私の質問はこれです:GILのスケーリングの問題に遭遇しますか?これまでのところパフォーマンスの問題は見られませんでした。これを測定するには問題があります。あなたがヒットし、ちょうど窒息し始めるいくつかのスレッドや類似のものがありますか? GILのパフォーマンスは、シングルコアCPU上でマルチスレッドコードを実行すると大きく異なるのですか?

ありがとうございます!

+0

GILがスレッドの安全を保証するとは思わないでしょう。インタプリタ内部を保護するために存在するため、実際にクラッシュすることはなく、偶然にもいくつかのタイプの操作(Cで実装され、すべての状態依存の作業を1バイトコード命令で行う)をアトミックにします。しかし、2つの異なるスレッドで 'x + = 1'を安全に実行することはできません。なぜなら、そのバイトコードは' x'をロードし、1を加え、 'x'に戻って格納するためです。その間の任意のステップで。 GILは論理的な安全性のためではなく、インタプリタの完全性のためのものです。残りの部分はロックを使用します。 – ShadowRanger

答えて

0

GILは複雑なトピックであり、ケースの正確な動作はコードなしで説明するのが難しいです。だから、将来あなたが苦しんでいくかどうかは分かりません。私はちょうどあなたがposdibleならPython 3の最近のバージョンにプロジェクトを持って来るように助言することができます。 Python 3のGILには多くの改良が施されています。

これは、Pythonが壊す可能性のある魔​​法の数とは全く異なります。一般的なルールはちょうどです:より多くのスレッド、より多くの問題。最も複雑なのは1から2です。

GILはいくつかの状況で、特にCコードが実行されたりI/Oが実行されたときに解放されます。これにより、コードを並行して実行することができます。最新のCPUを搭載した高度な機能では、コードを1つのCPUに限定するのは賢明ではありません。

関連する問題