recherche

Maison  >  Questions et réponses  >  le corps du texte

java - 这段代码开了并行为什么变慢了?

开了并行需要17秒左右,把.parallel()去掉后只用5秒左右(i5双核)

public static void main(String[] args)
{
    long start = System.currentTimeMillis();
    long ret = new Random().longs(0, 10)
                        .limit(10000 * 10000)
                        .parallel()
                        .sum();
    long end = System.currentTimeMillis();
    System.out.println(ret);
    System.out.println("takes " + (end - start) + "ms");
    }
}

然后把代码中的stream改成用range而不用random生成随机数流,则是开并行要比不开并行快一倍(300ms:600ms):

public static void main(String[] args)
{
    long start = System.currentTimeMillis();
    long ret = IntStream.range(0, 1000000000)
                        .parallel()
                        .sum();
    long end = System.currentTimeMillis();
    System.out.println(ret);
    System.out.println("takes " + (end - start) + "ms");
    }
}

为什么前一个例子开并行会更慢,是random类的缘故吗?望指教!

高洛峰高洛峰2887 Il y a quelques jours585

répondre à tous(1)je répondrai

  • 怪我咯

    怪我咯2017-04-17 17:50:22

    Après avoir activé le parallélisme, le tableau d'origine doit être divisé en blocs, accumulés dans chaque bloc, puis fusionnés. Ces opérations supplémentaires prennent du temps. L'accumulation elle-même est une opération linéaire très efficace. Par conséquent, si les données parallèles ne sont pas assez volumineuses ou si les paramètres (tels que le nombre de tâches, etc.) sont définis de manière déraisonnable, cela ne sera pas aussi efficace que l'original

    répondre
    0
  • Annulerrépondre