我有一个应用程序接受队列上的工作,然后旋转该工作以在独立线程上完成。线程的数量并不多,比如多达 100 个,但这些都是密集型任务,可以快速将 CPU 提升到 100%。
以最快的速度完成最多的工作:我最好在需要做更多工作时启动更多线程并让 Java 线程调度程序处理分配工作,或者变得更聪明并管理工作负载以保持 CPU 低于100% 让我更快?
该机器专用于我的 java 应用程序。
编辑:
感谢您的精彩投入!
这些任务具有不同的复杂性并涉及 I/O,因此如果线程池为 4,那么 CPU 很可能只能运行到 20%。我无法知道有多少任务实际上会使 CPU 达到 100%。
我的想法是我应该通过 RMI 监控 CPU 并动态地上下拨动工作,或者我应该不在乎并让操作系统处理它。
最佳答案
如果并行线程中有太多并发计算密集型任务,则会很快达到 yield 递减点。实际上,如果有 N 个处理器(内核),那么您不需要超过 N 个这样的线程。现在,如果任务偶尔因 I/O 或用户交互而暂停,那么正确的数字可能会更大一些。但总的来说,如果在任何时候想要进行计算的线程数量超过可用内核数量,那么您的程序就是在上下文切换上浪费时间——即,调度会消耗您的成本。
关于CPU 使用率 100% 时的 Java 线程优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10116502/