【发布时间】:2012-08-14 13:37:04
【问题描述】:
你能给我解释一下这个废话吗? 我有一个基本上用数学运算填充数组的方法。不涉及 I/O 或任何东西。现在,这个方法运行大约需要 50 秒,并且代码是完全可扩展的(理论上是 100%),所以我把它分成 4 个线程,等待它们完成,然后重新组装 4 个数组。现在,我在四核处理器上运行程序,预计需要大约 15 秒,而实际上需要 58 秒。没错:它需要更长的时间!我看到 cpu 工作 100%,我知道每个线程执行 1/4 的计算,创建线程和重新组装数组总共需要大约 1-2 毫秒。 是什么导致了这种性能损失?这段时间cpu到底在做什么? 代码:http://pastebin.com/cFUgiysw
【问题讨论】:
-
你是如何定义你的数组的?
-
你调用什么方法?线程访问的任何同步方法都可能成为瓶颈。同样没有一些代码我们只能猜测。
-
问题一定出在这个类上,如果我用一些随机计算运行它,它比顺序计算快 4 倍。能否提供
Randomatic的出处? -
哦,这可能是! randomatic 使用类向量,它具有同步方法。我没有想到 :D 让我尝试修复它,然后我会发布代码
-
天哪,它是矢量。现在它快得要命了 非常感谢!
标签: java multithreading scalability cpu procedural-generation