質問: こんにちは。 ExecutorServiceについて伺いたいのですが。 マルチスレッドプログラムでExecutorServiceを使えば、API側で容易にスレッド管理してくれるとの事ですが、プレーンなスレッドで重い処理(例えば、画像生成)をさせた時など、すぐにCPUが100%に到達し、同時実行はいくつまでと指定しなければ、思うようにパフォーマンスが出ない、或いは固まってしまう現象に悩まされた事があります。 そもそもスレッドには、CPUの何パーセントまでリソース占有してよいとか、指定できるのでしょうか?? 1スレッドを起こしたら、重い処理であれば、CPU100%リソースを占有してしまうものなのでしょうか? リソースと言う表現自体おかしいかも知れませんが、メモリではなく、あくまでもCPUの占有率の管理を行いたいです。 ExecutorServiceで、それは可能でしょうか? お聞かせ頂ければ幸いです。
回答: マルチスレッドで速くなるのは、スレッドが何かを占有する ことなく並列実行可能な場合であって、常に速くなるわけで はない。 場合によってはシーケンシャルより遅くなる。 そもそも占有というのは、例えば割り込みできないロジック とか、ブロッキングAPIを使ってるとか、まず実装上の話。 そのロジックをメインが動かすかワーカーが動かすかには関 係がない。