したがって、これは多かれ少なかれ理論的な問題です。私はおそらく強力なシングルコアマシンを持っていますが、それでもコアは1つだけです。今、私は2つの選択肢があります:
マルチスレッディング:私の知る限り、GILのために複数のコアがあったとしても、マシンで複数のコアを使用することはできません。したがって、この状況では、違いはありません。
マルチプロセッシング:これは私が疑うところです。シングルコアマシンでマルチプロセッシングを実行できますか?または、マシンで使用可能なコアを確認して、まったく同じ数または少ない数のプロセスを実行する必要があるたびに、
誰かがマシンのマルチプロセッシングとコアの関係について私を案内してくれませんか?.
私はこれが理論的な質問であることを知っていますが、私の概念はこれについてあまり明確ではありません。
これは大きなトピックですが、ここにいくつかの指針があります。
シングルコアシステムでは、マルチスレッドとマルチプロセッシングの両方を使用できます。
GILは、基盤となるアーキテクチャーに関係なく、純粋にPython=計算にバインドされたタスクでのマルチスレッドの有用性を制限します。I/ Oにバインドされたタスクの場合、それらは完全に正常に機能します。おそらく、そもそもそれらは実装されていなかっただろう。
純粋なPythonソフトウェアの場合、並列計算に関しては、マルチプロセッシングが常に安全な選択です。もちろん、複数のプロセスは複数のスレッドよりもコストがかかります(スレッドとは対照的に、プロセスはメモリを共有しないためです。また、プロセスには、スレッドと比較してわずかに高いオーバーヘッドが伴います。
ただし、シングルプロセッサマシンの場合、マルチプロセッシング(およびマルチスレッディング)を使用すると、計算量の多いタスクの速度がほとんどまたはまったく向上せず、実際には少し遅くなります。ただし、OSがそれらをサポートしている場合(デスクトップ、ワークステーション、クラスターなどでは一般的ですが、組み込みシステムでは一般的ではない場合があります)、複数のI/Oバインドプログラムを同時に効率的に実行できます。
簡単に言えば、それはあなたがやっていることに少し依存します...
multiprocessing モジュールは基本的にpythonインタプリタの複数のインスタンスを生成するため、GILの心配はありません。
マルチプロセッシングは、以前に使用したことがある場合、 threading モジュールで使用されるものと同じAPIを使用します。
マルチプロセッシング、スレッド化(マルチスレッド化と呼びます)とXコアプロセッサの間で混乱しているようです。
参照: PythonのPyPy実装