我有读取一组二进制文件的代码,这些文件基本上由许多序列化的 java 对象组成。我正在尝试通过读取线程池(Executors.newFixedThreadPool
)中的文件来并行化代码
我所看到的是,当线程化时,读取的运行速度实际上比单线程慢 - 从 1.5 到 10 倍慢,具体取决于线程数。
在我的测试用例中,我实际上是从多个线程读取同一个文件(35mb),所以我不受 I/O 的任何约束。我运行的线程数不超过 CPU,并且池之间没有任何同步——即我只是独立处理一堆文件。
有谁知道线程时性能缓慢的可能原因是什么?我应该寻找什么?或者剖析问题的最佳方法是什么?我已经在类中查找了可以在线程之间共享的静态变量,但我没有看到任何变量。在线程中实例化时,其中一个java.*
类的运行速度是否会明显变慢(例如java.zip.deflate
我正在使用的类)?
感谢您的任何提示。
Upd:另一个有趣的提示是,当单个线程运行时,执行读取的函数的执行时间是恒定到高精度的,但是当运行多个线程时,我看到时间上有很大的变化。