【发布时间】:2014-03-25 19:22:26
【问题描述】:
我试图解决Euler Project。要点here。是的,我明白了,没有使用任何算法——我不想这么做。问题是,第二个文件使用 ExecutorService 来查找值 - 我知道结果将不正确,但与单线程文件相比,它正在爬行。我认为创建线程本身可能会将池大小减少到 4 个(我有一个八核处理器),但这没有任何作用。
之前我还使用similar approach 来显着加快使用多线程生成缩略图的速度。但我无法理解是什么导致了这种特殊情况的缓慢。我不是想得到正确的解决方案——我知道我应该先这样做,然后再尝试其他任何事情。我做错了什么。我来这里并不是为了找到问题的解决方案,但我想了解为什么它很慢。我使用了线程访问的static 变量。这可能是个问题吗?
【问题讨论】:
-
线程运行了多长时间?如果它们是短暂的,那么它可能不值得。他们在 IO 上被阻止了吗?只有在 CPU 受限的情况下才能看到速度提升。
-
这可能是创建几乎无限数量的 Runnable(包括负数)的开销
-
@Gray 我正在使用
ExecutorService,所以希望所有线程都可以存活,直到找到一个数字 - 我在执行 5-6 分钟后终止程序,因为它运行非常缓慢。我应该运行更长的时间吗?但是线程中的调用仅持续 1-2 左右的几毫秒。在 IO 上被阻止 - 现在我只有一行System.out.println- 告诉我在检查因子中达到的计数仍然重要吗?与单线程相比,它的运行速度仍然慢得多。 -
@immibis 即使在运行了几分钟后,我也看到了计数——不是线程,而是线程执行特定方法的次数——我已经达到了几十万。线程数 - 我正在打印线程 ID,我看到的最大线程 ID 是 15。另外我认为我正在使用线程池,所以它仍然会创建无限线程。我错过了什么吗?
标签: java multithreading performance