0

我尽力同时实现狄克逊算法,效果很差。对于小数字<〜40位,它的运行时间大约是我班的其他实现的两倍,大约40位后,需要更长的时间。Java并发狄克逊算法

我尽我所能,但我担心它有一些我找不到的致命问题。

我的代码(相当长)位于here。理想的情况下,该算法比非并行实现更快地工作

回答

0

为什么你认为这会更快?旋转线程并添加同步调用是巨大的时间同步。如果您无法避免同步关键字,我强烈建议使用单线程解决方案。

您可能能够以各种方式避免它们 - 例如,通过确保给定的变量仅由一个线程编写,即使被他人读取或通过像函数式语言一样工作,并使用递归使所有变量最终对于变量存储(Iffy,很难想象这会加速任何事情)。

如果你真正需要的是快速,但是,我从没有在寻找迅速解决我自己的努力找到了一些非常反直觉的事情了最近...

  • 静态方法没有过帮助实际的类实例。
  • 将代码分解成更小的类和方法实际上提高了速度。
  • Final方法帮助比我还以为他们会
  • 一旦我注意到,添加一个方法调用帮助速度顺水推舟
  • 不要紧张过度一次性类分配或数据分配而避免分配对象循环(这一点很明显,但我认为它是最关键的)

我能够直观的是,编译器在优化时非常智能,并且被优化为“理想”java代码。静态方法不适用于接近理想的地方 - 它们是一种反模式,是最多的一种。

我建议你写出最清晰,最好的OO代码,它可以真正作为参考正确运行 - 然后计时并开始尝试调整以加快速度。

+1

“巨​​大的时间同步”好双关!故意还是错字? –