0

大規模なマルチコア マシンでのマルチスレッド パフォーマンスの問題に関する投稿を読んでい ます: http://www.reddit.com/r/Python/comments/1mn12l/what_you_do_not_like_in_python/ccbc5h8マルチスレッド アプリケーションは、マルチプロセッシング アプリケーションよりもパフォーマンスに大きな影響を与えます。

AFIAK マルチスレッドは現在、マルチプロセッシングより安価です (システム管理とコンテキスト切り替えの両方の点で)。簡単にするために、ロックを使用する必要はないと仮定しましょう。

共有メモリを保護するためにロックを使用しない場合、マルチスレッド アプリケーションとそれらのリソースへのアクセスを管理するためのシステム制限はありますか?

マルチスレッドがパフォーマンスに大きな影響を与える場合(投稿者が持っていた)、ユーザー空間の実装に関連しない理由はありますか?
つまり、同様のマルチプロセス ソリューションと比較して、データ集約型のマルチスレッド アプリケーションのパフォーマンスを低下させるシステム レベルのプロパティは何ですか?

スレッドとプロセスのセマンティックの違いを認識しています。

4

1 に答える 1

1

スレッドは、プロセスが共有しないメモリーのビューを共有します。エグゼキュータがメモリのビューを頻繁に変更する必要がある場合、メモリのビューを内部的に保護するロックの競合により、マルチスレッド アプローチはマルチプロセス アプローチよりも遅くなる可能性があります。

スレッドはファイル記述子も共有します。ファイルを頻繁に開いたり閉じたりする場合、スレッドはプロセス ファイル記述子テーブルへのアクセスを相互にブロックしてしまう可能性があります。マルチプロセス アプローチでは、この問題は発生しません。

ライブラリ関数で内部同期オーバーヘッドが発生する場合もあります。シングル スレッドの場合、プロセス レベルの構造を保護するロックは no-ops になる可能性があります。マルチスレッドの場合、これらのロックには高価なアトミック操作が必要になる場合があります。

最後に、マルチスレッド プロセスでは、 などを実装するために、スレッド ローカル ストレージに頻繁にアクセスする必要がある場合がありますerrno。一部のプラットフォームでは、これらのアクセスはコストがかかる可能性があり、シングルスレッド プロセスで回避できます。

于 2013-09-24T02:59:38.523 に答える