4つのCPUを持つマシンでスレッドプールが実行されていて、このプールに負荷動的制御を実行したいとします。プール内でスレッドが実行されているときにcorePoolSizeを変更することは可能でしょうか?つまり、負荷が低い場合は、最大で2つのスレッドを同時に実行できますが、負荷が高い場合は4つのスレッドが許可されます。そうでない場合は、適切な解決策はありますか?ThreadPoolExecutorのcorePoolSizeを動的に変更する
0
A
答えて
1
プールにスレッドがいくつか存在する場合、corePoolSizeを変更できますか?
確かに。 corePoolSize
はvolatile
にThreadPoolExecutor
とマークされていますので、いつでもお使いのマシンの負荷に基づいてtpe.setCorePoolSize(...)
と電話することができます。プールに仕事を出して寝ることも、負荷をチェックしたり、コアプールのサイズを調整したりすることもできます。これを行うには、コアサイズに別のスレッドを追加したいと思うでしょう。
つまり、負荷が低い場合、最大で2つのスレッドを同時に実行できますが、負荷が高い場合は4つのスレッドが許可されます。
それだけの時間が、これは実際にあなたがスレッドプールに送信されたジョブが完全にCPUがバインドされている場合には意味があるになるだろうことに注意することが重要であるが、これは罰金聞こえます。すべてのIO(ディスク、ネットワークなど)は、並行性を低下させることはあまり意味がないことを意味します。
これは私がスレッドアプリケーションの大部分を書いたが、私はこれをやらなければならなかったとは思わなかった。
関連する問題
- 1. ThreadPoolExecutor/ScheduledThreadPoolExecutorに渡される推奨されるcorePoolSizeは何ですか?
- 2. 動的にエンティティプロパティを動的に変更する方法
- 3. uitableviewフッターを動的に変更する
- 4. CSSを動的に変更する
- 5. java3d SceneGraphを動的に変更する
- 6. filterToolbarオプションを動的に変更する
- 7. 動的にonclickメソッドを変更する
- 8. Umbracoページテンプレートを動的に変更する
- 9. Polymer:動的にスタイルシートを変更する
- 10. 動的にQuillプレースホルダーを変更する
- 11. 動的にテキストを変更するqlabel
- 12. GridViewテンプレートフィールドを動的に変更する
- 13. yii2データベースを動的に変更する
- 14. JWTサブジェクトフィールドを動的に変更する
- 15. row_formatを動的に変更する
- 16. スロットルパラメータを動的に変更する
- 17. GridViewアイテムテンプレートを動的に変更する
- 18. スプリングスプリングを動的に変更する
- 19. Java - 動的にロギングレベルを変更する
- 20. ComboFieldEditor。値を動的に変更する
- 21. 動的に幅を変更するSelect2
- 22. ズームを動的に変更する
- 23. 動的にappcacheを変更する
- 24. iOS - フォントサイズを動的に変更する
- 25. ソースパラメータを動的に変更する
- 26. ドッカー - ストレージフォルダを動的に変更する
- 27. メーター値を動的に変更する
- 28. カスタムコントロールスタイルを動的に変更する
- 29. 動的にenv値を変更する
- 30. メタタグを動的に変更する
"最も一般的には、コアおよび最大プールサイズは構築時にのみ設定されますが、setCorePoolSize(int)およびsetMaximumPoolSize(int)を使用して動的に変更することもできます。 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html – Fildor
高負荷/低負荷をどのように検出する予定ですか? – Fildor
Re、 "そうでなければ、適切な解決策はありますか?"最悪の場合は、独自のスレッドプールを実装できません。 –