CPU 使用率 100% 时的 Java 线程优化

标签 java multithreading performance

我有一个应用程序接受队列上的工作,然后旋转该工作以在独立线程上完成。线程的数量并不多,比如多达 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/

相关文章:

java - 将 JButton 改回原来的 "metal"颜色

java - 矩形绘制在错误的位置

mysql - 当有多个 JOINS 时,使用非规范化设计不是更好吗?

java - 使用 httpclient 的连接持久性

mysql - 请问我该如何优化这个mysql查询?

java - 无法处理与 jSTL 相关的 Jasper 验证错误

java - 可运行的 JAR 文件在 Eclipse 中导出后不运行

JavaFx : bring stage to focus on keypress

Node.js 异步调用处理和多核扩展

c - 执行recv()和send()winsock