1

Python と GIL に関するDavid Beazley の論文をフォローアップすると、Windows ベースのマルチコア システムで Python プログラム (GIL を使用した CPython など) を 1 つの CPU に制限するのは良い方法でしょうか?

パフォーマンスが向上しますか?

更新: 複数のスレッドが使用されていると仮定します(違いがあるかどうかはわかりません)

4

2 に答える 2

4

実際、この論文は、プログラムをシングル コアに制限すると、その特定のケースでのパフォーマンスが向上することを暗示しています。ただし、対処する必要がある懸念事項がいくつかあります。

  1. 彼のテストは主に、IO バウンド スレッドではなく、計算集約型スレッドを対象としています。使用しているスレッドが頻繁に自発的にブロックされる場合 (クライアントを待機している Web サーバーなど)、GIL の問題はまったく発生しません。
  2. GIL の問題は、特にプロセスではなくスレッドを扱います。私はあなたの質問を間違って読んでいるかもしれませんが、すべてのPython プログラムを単一のコアに制限することについて質問しているようです。並列処理にプロセスを使用するプログラムは、GIL の問題に悩まされることはなく、プログラムを単一のコアに制限すると速度が低下します。
  3. GIL は Python 3.2 で大幅に異なります (David がこのビデオで言及しているように)。GIL は、このような問題に対処するために明示的に変更されました。まだ問題はありますが、この問題はなくなりました。

要約すると、OS にプログラムを単一のコアに制限させて生活を複雑にしたいのは、以下を実行しているときだけです。

  1. マルチスレッド
  2. コンピューティング集中型
  3. Python 3.2 より低い

マルチコア マシンでプログラムします。

于 2011-07-12T17:25:54.767 に答える
0

バイアス : 重い CPU 処理を伴う並列計算では、スレッド プログラミングよりもメッセージ パッシングと協調プロセスを好みます (もちろん、問題にもよります)。

プログラムを 1 つのコアに制限するべきではありません。Beazley は、これらの特殊な条件 (IO にバインドされたスレッドと CPU にバインドされたスレッドが互いに競合する条件) でパフォーマンスが低下する特定の問題を示していました。理想的には、別の方法を使用してこれらの状態を回避する必要があります ( import multiprocessing)。

最善の解決策は、マルチプロセッシング モジュールを使用して CPU にバインドされたタスクを他のプロセスに配置して、独自のコアを使用し、IO にバインドされたタスクをスレッド (またはマイクロスレッド/コルーチン、それに関する彼の興味深い論文を読んだ場合: http: //www.dabeaz.com/coroutines/ ) GIL はこれらのタイプのタスクに最適であるためです。

結論: Python スレッドは、 CPU バウンドではなく、IO バウンドのタスクに最適です。

于 2011-07-12T17:16:50.143 に答える