私は自分の娯楽のために、極限までいくつかの限界を押し込もうと試みています。スレッドプールのデフォルトは25スレッドになっており、MSDNによれば1000までプッシュすることができます。しかし、CPUコアあたりのスレッドの実際的な制限は何ですか?ある時点では、コンテキストの切り替えによってスレッドの保存よりもボトルネックが増えます。誰もこれをカバーするベストプラクティスを持っていますか? 100、200、500と話していますか?それはスレッドが何をしているかによって異なりますか?フレームワークが命令するアーキテクチャ以外に、CPUコアごとに最適なスレッド数が決まるのは何ですか?CPUあたりのスレッドの実際の制限はいくらですか?
答えて
それはスレッドの処理内容に依存します。それらがCPUに束縛されている(無限ループで緊密に座っている)場合、コア当たり1つのスレッドがCPUを飽和させるのに十分である。それ以上あれば(そして、あなたは既にバックグラウンドプロセスなどから多くのものを持っています)、あなたは競合を始めます。
スレッドが実行に適さない場合(たとえば、いくつかの同期オブジェクトでブロックされている場合)、あなたが持つ可能性があるスレッドの数の限界は、CPU以外の要素(スタック、 OSの内部制限など)。
あなたのアプリケーションが(大部分のように)CPUに束縛されていない場合は、コンテキストスイッチが重要です。なぜなら、アプリケーションが待機するたびにコンテキストスイッチが必要になるからです。スレッドが多すぎるという問題は、OSのデータ構造と、スレッドが同期アルゴリズムのランダム性のために実行する機会を得られない(またはごくまれに)飢餓のようないくつかの同期異常です。
アプリケーションがCPUにバインドされている場合(99%の時間がメモリで処理されている、まれにI/Oを実行している、またはユーザー入力や別のスレッドなどの何かを待っている場合)、最適なのは1論理スレッドあたり1スレッドこの場合、コンテキストの切り替えは行われないためです。
複数のCPUに1つのスレッドしかない場合でも、OSは毎回スレッドに割り込むことに注意してください。 OSはスレッドを割り込みだけでなくスレッド管理目的(タスクマネージャに表示するようにカウンタを更新する、スーパーユーザが削除するなど)にも割り込みをかけます。
ソケットデータを受信して、何らかの記述のデータベースに高速に送信するなど、通常の業務用の処理をしているとしましょう。理論的には、.NETは本当の意味ではI/Oを処理しません.SqlBulkCopyをSQL Serverにダンプすることができます。 – BobTheBuilder
OSを動かすだけで、すでにたくさんのスレッドが浮遊しています。コアごとに1つのスレッドが最適ですが、現実には決して起こりません。コアあたりのスレッドの最適数が何であるかを知ることが重要であることがわかりません。あなたのアプリだけが走っているわけではありません。 –
@Joel Gauvreau好奇心を呼んでください。そういうわけで私たちが最初にこの仕事に就いたのはなぜですか?知識と理解のための渇き...私の答えは "知るべきポイントは何ですか?" 「ただ知っている」 – BobTheBuilder
- 1. JVMメモリとCPU使用率の実際的な制限はありますか?
- 2. テキストエリアの実際の制限はいくらですか?
- 3. androidアプリケーションのCPUと実際のメモリ使用量の制限はいくらですか?
- 4. pthreads rwlocksの実際の制限はありますか?
- 5. Apacheクラスタの実際の制限はありますか?
- 6. GKSession sendDataの実際のデータサイズ制限はどのくらいですか:toPeers:withDataMode:error :?
- 7. 並列スレッド(Python)の実行に最大限の制限はありますか?
- 8. iTunes Connectアプリケーションの実際のファイルサイズ制限はいくらですか?
- 9. JSONにどれくらいの制限がありますか?
- 10. iOSのメモリマップファイル数には実際的な制限がありますか?
- 11. UIWebViewでPDFを開く/ダウンロードする際のページ制限がありますか?
- 12. Linux:フェアシェアに基づいてユーザーあたりのCPU /メモリリソースを制限します。
- 13. C#スレッドのCPU使用量を制限する
- 14. プロセスのCPU使用量を制限する方法はありますか?
- 15. あなたのクラスで許可する最大限のメソッドの制限はいくらですか?
- 16. GoogleのV8エンジンは実際に1プロセスあたり1 VMに制限されていますか?
- 17. スレッドのCPUサイクルとメモリの大まかな「コスト」はいくらですか?
- 18. zendフレームワークでは、テーブルデータゲートウェイを使用する際の制限はありますか?
- 19. CPU/OSで扱えるスレッドの数はいくつですか?
- 20. アプリストアからアプリを販売する際に制限はありますか?
- 21. ビューステートでのデータ保持の制限はいくらですか?
- 22. C#でC++ DLLからコールバックを取得する際のWinXPのメモリ制限はいくらですか?
- 23. GAEインスタンスあたりのスレッド数はいくつですか?
- 24. PerlNetの制限はありますか?
- 25. onSaveInstanceStateの制限はありますか?
- 26. beforeRouteLeaveの制限はありますか?
- 27. カレンダーエクステンダーの制限はありますか?
- 28. CPUコアあたりのスレッド割り当て(Windowsのみ)
- 29. CPUプロセスには少なくとも1つのスレッドがありますか?
- 30. Google Street View Image APIのユーザーあたりの料金制限はいくらですか?
http://stackoverflow.com/questions/1718465/optimal-number-of-threads-per-core - これは、ここで回答を待つ間にいくつかのクエリに答えるかもしれません:) – dotalchemy
@dotalchemy - 感謝、逸話情報は通常ですかなり役に立ちました。そこにいくつかの良い洞察があった。誰かがベストプラクティスに関する情報を得ているかどうかは興味深いでしょう。 – BobTheBuilder
42.もちろん... –