最近、私はPythonのマルチスレッドについて読んでいます。そして、ベテランが次のように言うのをよく聞きます: 「Pythonのマルチスレッドは役に立たない、マルチプロセスが推奨されます!」、でもなぜですか?それを言いますか?
そこで、次のような詳細な調査が行われます。 1. GIL とは何ですか?
GIL の正式名称は Global Interpreter Lock (グローバル インタープリター ロック) で、そのソースは Python 設計の開始時に考慮され、データ セキュリティのために行われた決定です。
2. 各 CPU は同時に 1 つのスレッドのみを実行できます (シングルコア CPU の下での複数のスレッドは実際には同時実行のみであり、並列処理は行われません。同時実行と並列処理は両方とも同時に処理されます)マクロの観点 マルチチャネルリクエストの概念。ただし、並行性と並列性には違いがあります。並列性は 2 つ以上のイベントが同時に発生することを意味し、並行性は 2 つ以上のイベントが同じ時間間隔で発生することを意味します。
。Python マルチスレッドでは、各スレッドの実行方法は次のとおりです。 1. GIL を取得します。2. スリープするか、Python 仮想マシンが一時停止するまでコードを実行します。 3. GIL を解放する プロセス内には GIL が 1 つだけあります。パスを取得できないスレッドは、実行のために CPU に入ることができません。 Python2 では、GIL に使用されます。このカウントは、sys.setcheckinterval を使用して調整し、リリースするたびにゼロにリセットされます。
GIL ロックが解放されるたびに、スレッドがロックをめぐって競合し、スレッドが切り替わり、リソースが消費されます。また、GIL ロックのため、Python のプロセスは同時に 1 つのスレッドしか実行できません (GIL を取得したスレッドが実行できます)。これが、マルチコア CPU 上で Python のマルチスレッド効率が高くない理由です。 ここで分類の議論を行います:
1、CPU 密集コード (さまざまな循環処理、カウントなど) この場合、大量の計算作業により、ティック数はすぐにしきい値になります。に達すると、GIL の解放と再競合がトリガーされます (複数のスレッド間での切り替えは確実にリソースを消費します)。そのため、Python でのマルチスレッドは、CPU を大量に使用するコードには適していません。
2. IO 集中型のコード (ファイル処理、Web クローラーなど)、マルチスレッドにより効率が効果的に向上します (単一スレッドで IO 操作がある場合) , IO待ちが発生して無駄な時間が発生しますが、マルチスレッドをONにするとスレッドAが待機している間に自動的にスレッドBに切り替わり、CPUリソースが無駄にならず、プログラムの実行効率が向上します)。 つまり、Python のマルチスレッドは IO 集中型のコードにとってよりフレンドリーです。
python3では、プログラムはよりフレンドリーになりましたが、同時に1つのスレッドしか実行できないというGILによって引き起こされる問題はまだ解決されていないため、効率はまだ満足のいくものではありません。
️ .シームレスに実行できますが、マルチコアでは、CPU0 が GIL を解放した後、他の CPU 上のスレッドが競合しますが、GIL CPU0 によって即座に取得される可能性があり、他のいくつかの CPU のスレッドが起動して切り替え時間まで待機してから待機状態になり、スレッドのスラッシングが発生し、効率が低下します
質問の開始: ベテランが次のように言うのをよく聞きます: 「Python でマルチコア CPU を最大限に活用したい場合は、マルチプロセスを使用してください。」
、その理由は何ですか?
その理由は、各プロセスが独立したGILを持ち、互いに干渉しないため、本当の意味で並列実行できるため、Pythonでは複数プロセスの実行効率が優れている マルチスレッド対応(マルチコアCPUのみ)。 結論は次のとおりです。マルチコアで並列処理を実行して効率を向上させたい場合、より一般的な方法はマルチプロセスを使用することです。これにより、実行効率が効果的に向上します
【関連おすすめ】
1. Pythonでのマルチプロセスとマルチスレッドの例(1)
2. Pythonでのマルチプロセスとマルチスレッドの例(2) プログラミング方法
3. Python ではマルチ処理とマルチスレッドのどちらが高速ですか?
4. 5.Python 同時プログラミング スレッド プール/プロセス プール
以上がPython ではマルチスレッドではなくマルチプロセッシングを使用することをお勧めしますか?マルチプロセスを推奨する理由を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。