【发布时间】:2012-04-12 02:09:16
【问题描述】:
我有一个应用程序接受队列上的工作,然后旋转该工作以在独立线程上完成。线程的数量并不多,比如最多 100 个,但这些都是密集型任务,可以快速将 CPU 提升到 100%。
为了以最快的速度完成最多的工作:我最好是在需要做更多工作时启动更多线程并让 Java 线程调度程序处理工作分配,还是变得更智能并管理工作负载以保持低于 100% 的 CPU 让我更快?
这台机器专用于我的 java 应用程序。
编辑:
感谢您的精彩意见!
任务具有不同的复杂性并涉及 I/O,因此如果线程池较低(例如 4)很可能仅将 CPU 运行到 20%。我无法知道有多少任务实际上会占用 CPU 到 100%。
我的想法是我应该通过 RMI 监控 CPU 并动态地上下拨动工作,还是应该不关心,让操作系统来处理它。
【问题讨论】:
-
使用具有与处理器一样多的线程的固定大小的线程池。 100% 不一定是坏事,但您无法通过仅查看 CPU 使用率来判断 100% CPU 时间与过载情况(如颠簸)的最佳使用情况。
-
我以为你在使用一个有 100 个线程的池。是否为每个任务创建一个新线程?如果是这样,请立即停止这样做,并按照@trutheality 的建议使用一个池
-
@Steve 关于您的编辑,如果您可以将线程分为 CPU 密集型线程和 IO 线程,那么您可以将 CPU 密集型线程放入 #-of-cores 池中,并让 IO线程在没有池的情况下产生。这在理论上应该给你最好的用法。
标签: java multithreading performance