Python と GIL に関するDavid Beazley の論文をフォローアップすると、Windows ベースのマルチコア システムで Python プログラム (GIL を使用した CPython など) を 1 つの CPU に制限するのは良い方法でしょうか?
パフォーマンスが向上しますか?
更新: 複数のスレッドが使用されていると仮定します(違いがあるかどうかはわかりません)
Python と GIL に関するDavid Beazley の論文をフォローアップすると、Windows ベースのマルチコア システムで Python プログラム (GIL を使用した CPython など) を 1 つの CPU に制限するのは良い方法でしょうか?
パフォーマンスが向上しますか?
更新: 複数のスレッドが使用されていると仮定します(違いがあるかどうかはわかりません)
実際、この論文は、プログラムをシングル コアに制限すると、その特定のケースでのパフォーマンスが向上することを暗示しています。ただし、対処する必要がある懸念事項がいくつかあります。
要約すると、OS にプログラムを単一のコアに制限させて生活を複雑にしたいのは、以下を実行しているときだけです。
マルチコア マシンでプログラムします。
バイアス : 重い CPU 処理を伴う並列計算では、スレッド プログラミングよりもメッセージ パッシングと協調プロセスを好みます (もちろん、問題にもよります)。
プログラムを 1 つのコアに制限するべきではありません。Beazley は、これらの特殊な条件 (IO にバインドされたスレッドと CPU にバインドされたスレッドが互いに競合する条件) でパフォーマンスが低下する特定の問題を示していました。理想的には、別の方法を使用してこれらの状態を回避する必要があります ( import multiprocessing
)。
最善の解決策は、マルチプロセッシング モジュールを使用して CPU にバインドされたタスクを他のプロセスに配置して、独自のコアを使用し、IO にバインドされたタスクをスレッド (またはマイクロスレッド/コルーチン、それに関する彼の興味深い論文を読んだ場合: http: //www.dabeaz.com/coroutines/ ) GIL はこれらのタイプのタスクに最適であるためです。
結論: Python スレッドは、 CPU バウンドではなく、IO バウンドのタスクに最適です。