java - 在短时间内用 Java 执行数百万个任务?

标签 java multithreading performance

我需要用 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(使用多台机器的分布式系统)?我愿意使用其他一些技术或框架。

最佳答案

Akka tutorial展示了 Akka 如何帮助处理并行任务。

我没有任何使用 Akka 的实践经验,但我的理解是它负责根据部署时的配置(例如线程数、进程数、集群中的主机数...)扩展应用程序,任务实现几乎没有变化。

有关维基百科的更多信息:The key points distinguishing applications based on Akka actors

关于java - 在短时间内用 Java 执行数百万个任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25497590/

相关文章:

java - 控制台输出是阻塞操作吗?

java - 如何预测输出中的线程 ID?

c++ - 有限状态机的速度 - 面向对象与程序

python - Python 中 list.index(x) 的复杂性

.net - Perfmon、PerfMonitor 和 PerfView

java - 从数组中找出所有质数

java - spring @Controller 和 @RestController 注解的区别

java - svnkit + ssh 身份验证错误 (E170001)

java - AF_UNIX 的整数值是多少?

Java 线程基础