ホームページ  >  記事  >  バックエンド開発  >  Python でマルチスレッドではなくマルチプロセスを使用することが推奨されるのはなぜですか? --同僚の記事を再投稿_PHP チュートリアル

Python でマルチスレッドではなくマルチプロセスを使用することが推奨されるのはなぜですか? --同僚の記事を再投稿_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:55:06848ブラウズ

Pythonでマルチスレッドではなくマルチプロセスを使用することが推奨されるのはなぜですか? --同僚の記事から転載

最近、Pythonのマルチスレッドについて読んでいます。「Pythonのマルチスレッドは役に立たない、マルチプロセスが推奨されている!」というベテランの意見をよく聞きます。なんでそんなこというの?

あなたはそれがどのように起こるのかを知らなければなりません、そしてなぜそうなるのかも知っていなければなりません。そこで、以下の詳細な調査を行います:

まず第一に、背景を強調します:

1. GIL とは何ですか? GIL の正式名称は Global Interpreter Lock (グローバル インタープリター ロック) で、そのソースは Python 設計の開始時に考慮され、データ セキュリティのために行われた決定です。

2. 各 CPU は同時に 1 つのスレッドのみを実行できます (シングルコア CPU でのマルチスレッドは、実際には同時実行のみであり、並列処理ではありません。同時実行と並列処理はどちらも、マクロからの複数のリクエストを同時に処理するという概念です)ただし、同時実行と並列処理には違いがあります。並列処理とは、2 つ以上のイベントが同時に発生することを意味します。同時実行とは、2 つ以上のイベントが同じ時間間隔で発生することを意味します。)


イベントが発生します。 スレッドの実行方法:
1. GIL を取得します。
2. スリープするか、Python 仮想マシンが一時停止するまでコードを実行します。
3. GIL を解放する

スレッドが実行したい場合は、まず GIL を取得する必要があることがわかります。Python プロセスには GIL が 1 つだけあります。 。パスを取得できないスレッドは、実行のために CPU に入ることができません。


Python2 では、このカウントは sys.setcheckinterval) を通じて調整して解放できます。

GIL ロックが解放されるたびに、スレッドがロックを奪い合ってスレッドを切り替え、リソースを消費します。また、GIL ロックのため、Python のプロセスは同時に 1 つのスレッドしか実行できません (GIL を取得したスレッドが実行できます)。これが、マルチコア CPU 上で Python のマルチスレッド効率が高くない理由です。

では、Python のマルチスレッドはまったく役に立たないのでしょうか?

ここで機密事項を説明します:

1. CPU を大量に使用するコード (さまざまなループ処理、カウントなど) この場合、大量の計算作業により、ティック数がすぐにしきい値に達します。 GIL の解放と再競合をトリガーします (複数のスレッド間での切り替えは確実にリソースを消費します)。そのため、Python でのマルチスレッドは CPU を集中的に使用するコードには適していません。

2. IO 集中型のコード (ファイル処理、Web クローラーなど) の場合、マルチスレッドは効率を効果的に向上させることができます (単一スレッドで IO 操作がある場合、IO 待機が発生し、不必要な時間の無駄が発生します)。マルチスレッドを有効にすると、スレッド A の効率が効果的に向上します。待機中は自動的にスレッド B に切り替わり、CPU リソースを無駄にせず、プログラムの実行効率が向上します。したがって、Python のマルチスレッドは IO 集中型のコードに適しています。


python3では、同時に実行できるスレッドが1つしかないという問題が発生し、効率がまだ不十分です。


注意: マルチコア マルチスレッドはシングルコア マルチスレッドよりも劣ります。その理由は、マルチスレッドが単一コアで実行されると、GIL が解放されるたびにスレッドがウェイクアップするためです。 up は GIL ロックを取得できるため、シームレスに実行できますが、マルチコアでは、CPU0 が GIL を解放した後、他の CPU 上のスレッドが競合しますが、CPU0 によってすぐに GIL が取得されるため、他のいくつかの CPU でスレッドが起動される可能性があります。切り替え時刻まで起きてからスタンバイ状態に移行すると、スレッドのスラッシングが発生し、効率が低下します

元の質問に戻ります。「Python でマルチコア CPU を最大限に活用したい場合は、マルチプロセスを使用する必要があります。」というベテランの声をよく聞きます。その理由は何ですか?

その理由は、各プロセスが独立したGILを持ち、互いに干渉しないため、本当の意味で並列実行できるため、Pythonではマルチプロセスの方が実行効率が良いからです。マルチスレッドの(マルチコア CPU のみ)。


結論は次のとおりです。マルチコアで並列処理を実行して効率を向上させたい場合、より一般的な方法は複数のプロセスを使用することです。これにより、実行効率が効果的に向上します

www.bkjia.com本当http://www.bkjia.com/PHPjc/1117253.html技術記事 Python でマルチスレッドではなくマルチプロセスを使用することが推奨されるのはなぜですか? --同僚の記事からの転載 最近、Python のマルチスレッドについて読んでいます。「Python でのマルチスレッドは無駄だ...
」という言葉をよく聞きます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。