gpt4 book ai didi

java - EC2 和 Java : worst performance when using threads

转载 作者:行者123 更新时间:2023-11-30 09:41:37 27 4
gpt4 key购买 nike

我在使用 Amazon EC2 和 Java 时遇到了一种很难正确理解的行为。我所拥有的是使用 iText 将单个多页 PDF 文件拆分为多个文件(每页一个文件)的代码。我有大约 100 万页要提取(大约 2500 个源文件),因此我正在 EC2 上进行测试以确定哪种设置最适合此类工作。

我制作了一个小型应用程序(下面的链接),它可以按顺序处理每个源文件,而不启动任何工作线程,并且还可以通过执行器使用 Java 线程执行相同的任务。

在我的本地 Macbook Pro 上,线程版本的运行速度比顺序版本快 30% 到 40%,但在我尝试过的每个 EC2 实例上,线程版本的性能都比顺序运行差得多。

我尝试了一个小实例、一个大实例和一个高 CPU 特大实例。我想了解的是什么可能导致线程版本出现如此糟糕的结果;如果它与我的代码或 EC2 上的 I/O 有关,或者仅仅是对于这个特定任务,线程确实是一个糟糕的选择?我接受任何线索。

相关代码在这里:https://gist.github.com/1641643 (对于“面向标志的编程”感到抱歉,在测试之间切换更容易)。我为 Executors.newFixedThreadPool 尝试了不同的值(2、4、8 等...),结果没有任何重大变化。

最佳答案

大胆猜测,但如果所有线程都对单个硬盘进行读写,则会强制磁盘不断更改读写位置。而在单线程方法中,线程可以一次读取整个输入文件,并立即写入结果。

关于java - EC2 和 Java : worst performance when using threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com