在java中使用parallels表明性能没有提高

时间:2016-05-20 02:23:48

标签: java multithreading parallel-processing

我最近开始使用LWJGL模拟一组恒星体。该解决方案需要每帧执行许多循环迭代。该程序计算每个其他身体施加在每个身体上的力。我不希望实现任何形式的限制,例如树算法。该程序本身能够以大约15 fps的速度模拟800个随机质量体(1到50之间)。这是计算的原始代码,然后更新每个正文的位置。

public void updateAllBodies() {
    for (Body b : bodies) {
        for (Body c : bodies) {
            if (b != c) {
                double[] force = b.getForceFromBody(c, G);
                b.velocity[0] += force[0];
                b.velocity[1] += force[1];
                b.velocity[2] += force[2];
                b.updatePosition();
            }
        }
    }
}

最近我遇到了并行和流的主题。看到我的原始代码只使用了一个线程,我想我可以通过将数组转换为流来改进性能,并使用

执行它
.parallelStream() 

我对多线程和并行性知之甚少,但这是我想出的结果代码。

public void updateAllBodies() {
    Arrays.asList(bodies).parallelStream().forEach(i -> {
        for(Body b: bodies){
        if (i != b){
            double[] force = i.getForceFromBody(b, G);
            i.velocity[0] += force[0];
            i.velocity[1] += force[1];
            i.velocity[2] += force[2];
            i.updatePosition();
        }
       }
    });
}

不幸的是,在执行时,这个新代码产生了与旧代码相同的15 fps。我能够确认有3个并发线程正在运行

Thread.currentThread().getName();

此时,我不知道原因是什么。降低机身数量确实显示出帧速率的急剧增加。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我似乎无法找到一种方法来将评论标记为帖子的答案,因此我将说明最佳答案是softwarenwebie7331给出的。