【发布时间】:2014-08-26 03:31:40
【问题描述】:
我需要用 Java 执行大约 8,000,000 个任务。每个任务的运行时间在 1 到 50 毫秒之间。我尝试使用循环串行执行这些任务,并使用ThreadPoolExecutor 并行执行这些任务。显然,在循环中连续运行它们要慢得多,然后通过ThreadPoolExecutor 运行它们会显着提高性能。但是,我仍然对ThreadPoolExecutor 的性能不满意。
我能够在 4 个内核上使用 15 个线程运行所有 8,000,000 个任务。在向ThreadPoolExecutor 提交任务时,我正在批处理 50,000 个任务。我允许 ExecutorCompletionService 返回结果的 1000 毫秒超时。在使用这些参数调整我的应用程序后,我将有大约 25 分钟的时间来处理所有 8,000,000 个任务。
有什么方法可以让我的应用程序运行速度超过 25 分钟,也许是 Hadoop(使用多台机器的分布式系统)?我愿意使用其他一些技术或框架。
【问题讨论】:
-
Hadoop 或 Cassandra 可能会有所帮助,这取决于您是否遇到 Amdahl's law。您的任务可以提高效率吗?
-
你只需将应用程序复制到10台机器上,将800万个任务分成10个部分,在10台机器上点击“运行”10次
-
增加线程数会有所帮助,但这也需要更多内核数才能看到性能提升。
-
您确定您的程序受 CPU 限制吗?
-
您是否正在丢弃您创建的对象?有什么可以重复使用的吗?
标签: java multithreading performance